(0) Obligation:

The Runtime Complexity (innermost) of the given CpxRelTRS could be proven to be BOUNDS(1, n^5).


The TRS R consists of the following rules:

#abs(#0) → #0
#abs(#neg(@x)) → #pos(@x)
#abs(#pos(@x)) → #pos(@x)
#abs(#s(@x)) → #pos(#s(@x))
#equal(@x, @y) → #eq(@x, @y)
#greater(@x, @y) → #ckgt(#compare(@x, @y))
#less(@x, @y) → #cklt(#compare(@x, @y))
*(@x, @y) → #mult(@x, @y)
+(@x, @y) → #add(@x, @y)
-(@x, @y) → #sub(@x, @y)
add(@b1, @b2) → add'(@b1, @b2, #abs(#0))
add'(@b1, @b2, @r) → add'#1(@b1, @b2, @r)
add'#1(::(@x, @xs), @b2, @r) → add'#2(@b2, @r, @x, @xs)
add'#1(nil, @b2, @r) → nil
add'#2(::(@y, @ys), @r, @x, @xs) → add'#3(sum(@x, @y, @r), @xs, @ys)
add'#2(nil, @r, @x, @xs) → nil
add'#3(tuple#2(@z, @r'), @xs, @ys) → ::(@z, add'(@xs, @ys, @r'))
bitToInt(@b) → bitToInt'(@b, #abs(#pos(#s(#0))))
bitToInt'(@b, @n) → bitToInt'#1(@b, @n)
bitToInt'#1(::(@x, @xs), @n) → +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0))))))
bitToInt'#1(nil, @n) → #abs(#0)
compare(@b1, @b2) → compare#1(@b1, @b2)
compare#1(::(@x, @xs), @b2) → compare#2(@b2, @x, @xs)
compare#1(nil, @b2) → #abs(#0)
compare#2(::(@y, @ys), @x, @xs) → compare#3(compare(@xs, @ys), @x, @y)
compare#2(nil, @x, @xs) → #abs(#0)
compare#3(@r, @x, @y) → compare#4(#equal(@r, #0), @r, @x, @y)
compare#4(#false, @r, @x, @y) → @r
compare#4(#true, @r, @x, @y) → compare#5(#less(@x, @y), @x, @y)
compare#5(#false, @x, @y) → compare#6(#greater(@x, @y))
compare#5(#true, @x, @y) → -(#0, #pos(#s(#0)))
compare#6(#false) → #abs(#0)
compare#6(#true) → #abs(#pos(#s(#0)))
diff(@x, @y, @r) → tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0)))
diff#1(#false) → #abs(#0)
diff#1(#true) → #abs(#pos(#s(#0)))
div(@x, @y) → #div(@x, @y)
leq(@b1, @b2) → #less(compare(@b1, @b2), #pos(#s(#0)))
mod(@x, @y) → -(@x, *(@x, div(@x, @y)))
mult(@b1, @b2) → mult#1(@b1, @b2)
mult#1(::(@x, @xs), @b2) → mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x)
mult#1(nil, @b2) → nil
mult#2(@zs, @b2, @x) → mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs)
mult#3(#false, @b2, @zs) → @zs
mult#3(#true, @b2, @zs) → add(@b2, @zs)
mult3(@b1, @b2, @b3) → mult(mult(@b1, @b2), @b2)
sub(@b1, @b2) → sub#1(sub'(@b1, @b2, #abs(#0)))
sub#1(tuple#2(@b, @_@1)) → @b
sub'(@b1, @b2, @r) → sub'#1(@b1, @b2, @r)
sub'#1(::(@x, @xs), @b2, @r) → sub'#2(@b2, @r, @x, @xs)
sub'#1(nil, @b2, @r) → tuple#2(nil, @r)
sub'#2(::(@y, @ys), @r, @x, @xs) → sub'#3(diff(@x, @y, @r), @xs, @ys)
sub'#2(nil, @r, @x, @xs) → tuple#2(nil, @r)
sub'#3(tuple#2(@z, @r'), @xs, @ys) → sub'#4(sub'(@xs, @ys, @r'), @z)
sub'#4(tuple#2(@zs, @s), @z) → tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s)
sub'#5(#false, @z, @zs) → ::(@z, @zs)
sub'#5(#true, @z, @zs) → ::(#abs(#0), @zs)
sum(@x, @y, @r) → sum#1(+(+(@x, @y), @r))
sum#1(@s) → sum#2(#equal(@s, #0), @s)
sum#2(#false, @s) → sum#3(#equal(@s, #pos(#s(#0))), @s)
sum#2(#true, @s) → tuple#2(#abs(#0), #abs(#0))
sum#3(#false, @s) → sum#4(#equal(@s, #pos(#s(#s(#0)))))
sum#3(#true, @s) → tuple#2(#abs(#pos(#s(#0))), #abs(#0))
sum#4(#false) → tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0))))
sum#4(#true) → tuple#2(#abs(#0), #abs(#pos(#s(#0))))

The (relative) TRS S consists of the following rules:

#add(#0, @y) → @y
#add(#neg(#s(#0)), @y) → #pred(@y)
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y))
#add(#pos(#s(#0)), @y) → #succ(@y)
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y))
#and(#false, #false) → #false
#and(#false, #true) → #false
#and(#true, #false) → #false
#and(#true, #true) → #true
#ckgt(#EQ) → #false
#ckgt(#GT) → #true
#ckgt(#LT) → #false
#cklt(#EQ) → #false
#cklt(#GT) → #false
#cklt(#LT) → #true
#compare(#0, #0) → #EQ
#compare(#0, #neg(@y)) → #GT
#compare(#0, #pos(@y)) → #LT
#compare(#0, #s(@y)) → #LT
#compare(#neg(@x), #0) → #LT
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x)
#compare(#neg(@x), #pos(@y)) → #LT
#compare(#pos(@x), #0) → #GT
#compare(#pos(@x), #neg(@y)) → #GT
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y)
#compare(#s(@x), #0) → #GT
#compare(#s(@x), #s(@y)) → #compare(@x, @y)
#div(#0, #0) → #divByZero
#div(#0, #neg(@y)) → #0
#div(#0, #pos(@y)) → #0
#div(#neg(@x), #0) → #divByZero
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y))
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #0) → #divByZero
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y))
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y))
#eq(#0, #0) → #true
#eq(#0, #neg(@y)) → #false
#eq(#0, #pos(@y)) → #false
#eq(#0, #s(@y)) → #false
#eq(#neg(@x), #0) → #false
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y)
#eq(#neg(@x), #pos(@y)) → #false
#eq(#pos(@x), #0) → #false
#eq(#pos(@x), #neg(@y)) → #false
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y)
#eq(#s(@x), #0) → #false
#eq(#s(@x), #s(@y)) → #eq(@x, @y)
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
#eq(::(@x_1, @x_2), nil) → #false
#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #false
#eq(nil, ::(@y_1, @y_2)) → #false
#eq(nil, nil) → #true
#eq(nil, tuple#2(@y_1, @y_2)) → #false
#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) → #false
#eq(tuple#2(@x_1, @x_2), nil) → #false
#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2))
#mult(#0, #0) → #0
#mult(#0, #neg(@y)) → #0
#mult(#0, #pos(@y)) → #0
#mult(#neg(@x), #0) → #0
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y))
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #0) → #0
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y))
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y))
#natdiv(#0, #0) → #divByZero
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y)))
#natmult(#0, @y) → #0
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y))
#natsub(@x, #0) → @x
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y)
#pred(#0) → #neg(#s(#0))
#pred(#neg(#s(@x))) → #neg(#s(#s(@x)))
#pred(#pos(#s(#0))) → #0
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x))
#sub(@x, #0) → @x
#sub(@x, #neg(@y)) → #add(@x, #pos(@y))
#sub(@x, #pos(@y)) → #add(@x, #neg(@y))
#succ(#0) → #pos(#s(#0))
#succ(#neg(#s(#0))) → #0
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x))
#succ(#pos(#s(@x))) → #pos(#s(#s(@x)))

Rewrite Strategy: INNERMOST

(1) RelTrsToWeightedTrsProof (BOTH BOUNDS(ID, ID) transformation)

Transformed relative TRS to weighted TRS

(2) Obligation:

The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^5).


The TRS R consists of the following rules:

#abs(#0) → #0 [1]
#abs(#neg(@x)) → #pos(@x) [1]
#abs(#pos(@x)) → #pos(@x) [1]
#abs(#s(@x)) → #pos(#s(@x)) [1]
#equal(@x, @y) → #eq(@x, @y) [1]
#greater(@x, @y) → #ckgt(#compare(@x, @y)) [1]
#less(@x, @y) → #cklt(#compare(@x, @y)) [1]
*(@x, @y) → #mult(@x, @y) [1]
+(@x, @y) → #add(@x, @y) [1]
-(@x, @y) → #sub(@x, @y) [1]
add(@b1, @b2) → add'(@b1, @b2, #abs(#0)) [1]
add'(@b1, @b2, @r) → add'#1(@b1, @b2, @r) [1]
add'#1(::(@x, @xs), @b2, @r) → add'#2(@b2, @r, @x, @xs) [1]
add'#1(nil, @b2, @r) → nil [1]
add'#2(::(@y, @ys), @r, @x, @xs) → add'#3(sum(@x, @y, @r), @xs, @ys) [1]
add'#2(nil, @r, @x, @xs) → nil [1]
add'#3(tuple#2(@z, @r'), @xs, @ys) → ::(@z, add'(@xs, @ys, @r')) [1]
bitToInt(@b) → bitToInt'(@b, #abs(#pos(#s(#0)))) [1]
bitToInt'(@b, @n) → bitToInt'#1(@b, @n) [1]
bitToInt'#1(::(@x, @xs), @n) → +(*(@x, @n), bitToInt'(@xs, *(@n, #pos(#s(#s(#0)))))) [1]
bitToInt'#1(nil, @n) → #abs(#0) [1]
compare(@b1, @b2) → compare#1(@b1, @b2) [1]
compare#1(::(@x, @xs), @b2) → compare#2(@b2, @x, @xs) [1]
compare#1(nil, @b2) → #abs(#0) [1]
compare#2(::(@y, @ys), @x, @xs) → compare#3(compare(@xs, @ys), @x, @y) [1]
compare#2(nil, @x, @xs) → #abs(#0) [1]
compare#3(@r, @x, @y) → compare#4(#equal(@r, #0), @r, @x, @y) [1]
compare#4(#false, @r, @x, @y) → @r [1]
compare#4(#true, @r, @x, @y) → compare#5(#less(@x, @y), @x, @y) [1]
compare#5(#false, @x, @y) → compare#6(#greater(@x, @y)) [1]
compare#5(#true, @x, @y) → -(#0, #pos(#s(#0))) [1]
compare#6(#false) → #abs(#0) [1]
compare#6(#true) → #abs(#pos(#s(#0))) [1]
diff(@x, @y, @r) → tuple#2(mod(+(+(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(-(-(@x, @y), @r), #0))) [1]
diff#1(#false) → #abs(#0) [1]
diff#1(#true) → #abs(#pos(#s(#0))) [1]
div(@x, @y) → #div(@x, @y) [1]
leq(@b1, @b2) → #less(compare(@b1, @b2), #pos(#s(#0))) [1]
mod(@x, @y) → -(@x, *(@x, div(@x, @y))) [1]
mult(@b1, @b2) → mult#1(@b1, @b2) [1]
mult#1(::(@x, @xs), @b2) → mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1]
mult#1(nil, @b2) → nil [1]
mult#2(@zs, @b2, @x) → mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1]
mult#3(#false, @b2, @zs) → @zs [1]
mult#3(#true, @b2, @zs) → add(@b2, @zs) [1]
mult3(@b1, @b2, @b3) → mult(mult(@b1, @b2), @b2) [1]
sub(@b1, @b2) → sub#1(sub'(@b1, @b2, #abs(#0))) [1]
sub#1(tuple#2(@b, @_@1)) → @b [1]
sub'(@b1, @b2, @r) → sub'#1(@b1, @b2, @r) [1]
sub'#1(::(@x, @xs), @b2, @r) → sub'#2(@b2, @r, @x, @xs) [1]
sub'#1(nil, @b2, @r) → tuple#2(nil, @r) [1]
sub'#2(::(@y, @ys), @r, @x, @xs) → sub'#3(diff(@x, @y, @r), @xs, @ys) [1]
sub'#2(nil, @r, @x, @xs) → tuple#2(nil, @r) [1]
sub'#3(tuple#2(@z, @r'), @xs, @ys) → sub'#4(sub'(@xs, @ys, @r'), @z) [1]
sub'#4(tuple#2(@zs, @s), @z) → tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1]
sub'#5(#false, @z, @zs) → ::(@z, @zs) [1]
sub'#5(#true, @z, @zs) → ::(#abs(#0), @zs) [1]
sum(@x, @y, @r) → sum#1(+(+(@x, @y), @r)) [1]
sum#1(@s) → sum#2(#equal(@s, #0), @s) [1]
sum#2(#false, @s) → sum#3(#equal(@s, #pos(#s(#0))), @s) [1]
sum#2(#true, @s) → tuple#2(#abs(#0), #abs(#0)) [1]
sum#3(#false, @s) → sum#4(#equal(@s, #pos(#s(#s(#0))))) [1]
sum#3(#true, @s) → tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1]
sum#4(#false) → tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1]
sum#4(#true) → tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#and(#false, #false) → #false [0]
#and(#false, #true) → #false [0]
#and(#true, #false) → #false [0]
#and(#true, #true) → #true [0]
#ckgt(#EQ) → #false [0]
#ckgt(#GT) → #true [0]
#ckgt(#LT) → #false [0]
#cklt(#EQ) → #false [0]
#cklt(#GT) → #false [0]
#cklt(#LT) → #true [0]
#compare(#0, #0) → #EQ [0]
#compare(#0, #neg(@y)) → #GT [0]
#compare(#0, #pos(@y)) → #LT [0]
#compare(#0, #s(@y)) → #LT [0]
#compare(#neg(@x), #0) → #LT [0]
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x) [0]
#compare(#neg(@x), #pos(@y)) → #LT [0]
#compare(#pos(@x), #0) → #GT [0]
#compare(#pos(@x), #neg(@y)) → #GT [0]
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y) [0]
#compare(#s(@x), #0) → #GT [0]
#compare(#s(@x), #s(@y)) → #compare(@x, @y) [0]
#div(#0, #0) → #divByZero [0]
#div(#0, #neg(@y)) → #0 [0]
#div(#0, #pos(@y)) → #0 [0]
#div(#neg(@x), #0) → #divByZero [0]
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y)) [0]
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #0) → #divByZero [0]
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y)) [0]
#eq(#0, #0) → #true [0]
#eq(#0, #neg(@y)) → #false [0]
#eq(#0, #pos(@y)) → #false [0]
#eq(#0, #s(@y)) → #false [0]
#eq(#neg(@x), #0) → #false [0]
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y) [0]
#eq(#neg(@x), #pos(@y)) → #false [0]
#eq(#pos(@x), #0) → #false [0]
#eq(#pos(@x), #neg(@y)) → #false [0]
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y) [0]
#eq(#s(@x), #0) → #false [0]
#eq(#s(@x), #s(@y)) → #eq(@x, @y) [0]
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#eq(::(@x_1, @x_2), nil) → #false [0]
#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #false [0]
#eq(nil, ::(@y_1, @y_2)) → #false [0]
#eq(nil, nil) → #true [0]
#eq(nil, tuple#2(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), nil) → #false [0]
#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natdiv(#0, #0) → #divByZero [0]
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y))) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#natsub(@x, #0) → @x [0]
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#sub(@x, #0) → @x [0]
#sub(@x, #neg(@y)) → #add(@x, #pos(@y)) [0]
#sub(@x, #pos(@y)) → #add(@x, #neg(@y)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]

Rewrite Strategy: INNERMOST

(3) CpxWeightedTrsRenamingProof (BOTH BOUNDS(ID, ID) transformation)

Renamed defined symbols to avoid conflicts with arithmetic symbols:

* => times
+ => plus
- => minus

(4) Obligation:

The Runtime Complexity (innermost) of the given CpxWeightedTrs could be proven to be BOUNDS(1, n^5).


The TRS R consists of the following rules:

#abs(#0) → #0 [1]
#abs(#neg(@x)) → #pos(@x) [1]
#abs(#pos(@x)) → #pos(@x) [1]
#abs(#s(@x)) → #pos(#s(@x)) [1]
#equal(@x, @y) → #eq(@x, @y) [1]
#greater(@x, @y) → #ckgt(#compare(@x, @y)) [1]
#less(@x, @y) → #cklt(#compare(@x, @y)) [1]
times(@x, @y) → #mult(@x, @y) [1]
plus(@x, @y) → #add(@x, @y) [1]
minus(@x, @y) → #sub(@x, @y) [1]
add(@b1, @b2) → add'(@b1, @b2, #abs(#0)) [1]
add'(@b1, @b2, @r) → add'#1(@b1, @b2, @r) [1]
add'#1(::(@x, @xs), @b2, @r) → add'#2(@b2, @r, @x, @xs) [1]
add'#1(nil, @b2, @r) → nil [1]
add'#2(::(@y, @ys), @r, @x, @xs) → add'#3(sum(@x, @y, @r), @xs, @ys) [1]
add'#2(nil, @r, @x, @xs) → nil [1]
add'#3(tuple#2(@z, @r'), @xs, @ys) → ::(@z, add'(@xs, @ys, @r')) [1]
bitToInt(@b) → bitToInt'(@b, #abs(#pos(#s(#0)))) [1]
bitToInt'(@b, @n) → bitToInt'#1(@b, @n) [1]
bitToInt'#1(::(@x, @xs), @n) → plus(times(@x, @n), bitToInt'(@xs, times(@n, #pos(#s(#s(#0)))))) [1]
bitToInt'#1(nil, @n) → #abs(#0) [1]
compare(@b1, @b2) → compare#1(@b1, @b2) [1]
compare#1(::(@x, @xs), @b2) → compare#2(@b2, @x, @xs) [1]
compare#1(nil, @b2) → #abs(#0) [1]
compare#2(::(@y, @ys), @x, @xs) → compare#3(compare(@xs, @ys), @x, @y) [1]
compare#2(nil, @x, @xs) → #abs(#0) [1]
compare#3(@r, @x, @y) → compare#4(#equal(@r, #0), @r, @x, @y) [1]
compare#4(#false, @r, @x, @y) → @r [1]
compare#4(#true, @r, @x, @y) → compare#5(#less(@x, @y), @x, @y) [1]
compare#5(#false, @x, @y) → compare#6(#greater(@x, @y)) [1]
compare#5(#true, @x, @y) → minus(#0, #pos(#s(#0))) [1]
compare#6(#false) → #abs(#0) [1]
compare#6(#true) → #abs(#pos(#s(#0))) [1]
diff(@x, @y, @r) → tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))) [1]
diff#1(#false) → #abs(#0) [1]
diff#1(#true) → #abs(#pos(#s(#0))) [1]
div(@x, @y) → #div(@x, @y) [1]
leq(@b1, @b2) → #less(compare(@b1, @b2), #pos(#s(#0))) [1]
mod(@x, @y) → minus(@x, times(@x, div(@x, @y))) [1]
mult(@b1, @b2) → mult#1(@b1, @b2) [1]
mult#1(::(@x, @xs), @b2) → mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1]
mult#1(nil, @b2) → nil [1]
mult#2(@zs, @b2, @x) → mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1]
mult#3(#false, @b2, @zs) → @zs [1]
mult#3(#true, @b2, @zs) → add(@b2, @zs) [1]
mult3(@b1, @b2, @b3) → mult(mult(@b1, @b2), @b2) [1]
sub(@b1, @b2) → sub#1(sub'(@b1, @b2, #abs(#0))) [1]
sub#1(tuple#2(@b, @_@1)) → @b [1]
sub'(@b1, @b2, @r) → sub'#1(@b1, @b2, @r) [1]
sub'#1(::(@x, @xs), @b2, @r) → sub'#2(@b2, @r, @x, @xs) [1]
sub'#1(nil, @b2, @r) → tuple#2(nil, @r) [1]
sub'#2(::(@y, @ys), @r, @x, @xs) → sub'#3(diff(@x, @y, @r), @xs, @ys) [1]
sub'#2(nil, @r, @x, @xs) → tuple#2(nil, @r) [1]
sub'#3(tuple#2(@z, @r'), @xs, @ys) → sub'#4(sub'(@xs, @ys, @r'), @z) [1]
sub'#4(tuple#2(@zs, @s), @z) → tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1]
sub'#5(#false, @z, @zs) → ::(@z, @zs) [1]
sub'#5(#true, @z, @zs) → ::(#abs(#0), @zs) [1]
sum(@x, @y, @r) → sum#1(plus(plus(@x, @y), @r)) [1]
sum#1(@s) → sum#2(#equal(@s, #0), @s) [1]
sum#2(#false, @s) → sum#3(#equal(@s, #pos(#s(#0))), @s) [1]
sum#2(#true, @s) → tuple#2(#abs(#0), #abs(#0)) [1]
sum#3(#false, @s) → sum#4(#equal(@s, #pos(#s(#s(#0))))) [1]
sum#3(#true, @s) → tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1]
sum#4(#false) → tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1]
sum#4(#true) → tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#and(#false, #false) → #false [0]
#and(#false, #true) → #false [0]
#and(#true, #false) → #false [0]
#and(#true, #true) → #true [0]
#ckgt(#EQ) → #false [0]
#ckgt(#GT) → #true [0]
#ckgt(#LT) → #false [0]
#cklt(#EQ) → #false [0]
#cklt(#GT) → #false [0]
#cklt(#LT) → #true [0]
#compare(#0, #0) → #EQ [0]
#compare(#0, #neg(@y)) → #GT [0]
#compare(#0, #pos(@y)) → #LT [0]
#compare(#0, #s(@y)) → #LT [0]
#compare(#neg(@x), #0) → #LT [0]
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x) [0]
#compare(#neg(@x), #pos(@y)) → #LT [0]
#compare(#pos(@x), #0) → #GT [0]
#compare(#pos(@x), #neg(@y)) → #GT [0]
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y) [0]
#compare(#s(@x), #0) → #GT [0]
#compare(#s(@x), #s(@y)) → #compare(@x, @y) [0]
#div(#0, #0) → #divByZero [0]
#div(#0, #neg(@y)) → #0 [0]
#div(#0, #pos(@y)) → #0 [0]
#div(#neg(@x), #0) → #divByZero [0]
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y)) [0]
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #0) → #divByZero [0]
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y)) [0]
#eq(#0, #0) → #true [0]
#eq(#0, #neg(@y)) → #false [0]
#eq(#0, #pos(@y)) → #false [0]
#eq(#0, #s(@y)) → #false [0]
#eq(#neg(@x), #0) → #false [0]
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y) [0]
#eq(#neg(@x), #pos(@y)) → #false [0]
#eq(#pos(@x), #0) → #false [0]
#eq(#pos(@x), #neg(@y)) → #false [0]
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y) [0]
#eq(#s(@x), #0) → #false [0]
#eq(#s(@x), #s(@y)) → #eq(@x, @y) [0]
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#eq(::(@x_1, @x_2), nil) → #false [0]
#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #false [0]
#eq(nil, ::(@y_1, @y_2)) → #false [0]
#eq(nil, nil) → #true [0]
#eq(nil, tuple#2(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), nil) → #false [0]
#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natdiv(#0, #0) → #divByZero [0]
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y))) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#natsub(@x, #0) → @x [0]
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#sub(@x, #0) → @x [0]
#sub(@x, #neg(@y)) → #add(@x, #pos(@y)) [0]
#sub(@x, #pos(@y)) → #add(@x, #neg(@y)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]

Rewrite Strategy: INNERMOST

(5) TypeInferenceProof (BOTH BOUNDS(ID, ID) transformation)

Infered types.

(6) Obligation:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

#abs(#0) → #0 [1]
#abs(#neg(@x)) → #pos(@x) [1]
#abs(#pos(@x)) → #pos(@x) [1]
#abs(#s(@x)) → #pos(#s(@x)) [1]
#equal(@x, @y) → #eq(@x, @y) [1]
#greater(@x, @y) → #ckgt(#compare(@x, @y)) [1]
#less(@x, @y) → #cklt(#compare(@x, @y)) [1]
times(@x, @y) → #mult(@x, @y) [1]
plus(@x, @y) → #add(@x, @y) [1]
minus(@x, @y) → #sub(@x, @y) [1]
add(@b1, @b2) → add'(@b1, @b2, #abs(#0)) [1]
add'(@b1, @b2, @r) → add'#1(@b1, @b2, @r) [1]
add'#1(::(@x, @xs), @b2, @r) → add'#2(@b2, @r, @x, @xs) [1]
add'#1(nil, @b2, @r) → nil [1]
add'#2(::(@y, @ys), @r, @x, @xs) → add'#3(sum(@x, @y, @r), @xs, @ys) [1]
add'#2(nil, @r, @x, @xs) → nil [1]
add'#3(tuple#2(@z, @r'), @xs, @ys) → ::(@z, add'(@xs, @ys, @r')) [1]
bitToInt(@b) → bitToInt'(@b, #abs(#pos(#s(#0)))) [1]
bitToInt'(@b, @n) → bitToInt'#1(@b, @n) [1]
bitToInt'#1(::(@x, @xs), @n) → plus(times(@x, @n), bitToInt'(@xs, times(@n, #pos(#s(#s(#0)))))) [1]
bitToInt'#1(nil, @n) → #abs(#0) [1]
compare(@b1, @b2) → compare#1(@b1, @b2) [1]
compare#1(::(@x, @xs), @b2) → compare#2(@b2, @x, @xs) [1]
compare#1(nil, @b2) → #abs(#0) [1]
compare#2(::(@y, @ys), @x, @xs) → compare#3(compare(@xs, @ys), @x, @y) [1]
compare#2(nil, @x, @xs) → #abs(#0) [1]
compare#3(@r, @x, @y) → compare#4(#equal(@r, #0), @r, @x, @y) [1]
compare#4(#false, @r, @x, @y) → @r [1]
compare#4(#true, @r, @x, @y) → compare#5(#less(@x, @y), @x, @y) [1]
compare#5(#false, @x, @y) → compare#6(#greater(@x, @y)) [1]
compare#5(#true, @x, @y) → minus(#0, #pos(#s(#0))) [1]
compare#6(#false) → #abs(#0) [1]
compare#6(#true) → #abs(#pos(#s(#0))) [1]
diff(@x, @y, @r) → tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))) [1]
diff#1(#false) → #abs(#0) [1]
diff#1(#true) → #abs(#pos(#s(#0))) [1]
div(@x, @y) → #div(@x, @y) [1]
leq(@b1, @b2) → #less(compare(@b1, @b2), #pos(#s(#0))) [1]
mod(@x, @y) → minus(@x, times(@x, div(@x, @y))) [1]
mult(@b1, @b2) → mult#1(@b1, @b2) [1]
mult#1(::(@x, @xs), @b2) → mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1]
mult#1(nil, @b2) → nil [1]
mult#2(@zs, @b2, @x) → mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1]
mult#3(#false, @b2, @zs) → @zs [1]
mult#3(#true, @b2, @zs) → add(@b2, @zs) [1]
mult3(@b1, @b2, @b3) → mult(mult(@b1, @b2), @b2) [1]
sub(@b1, @b2) → sub#1(sub'(@b1, @b2, #abs(#0))) [1]
sub#1(tuple#2(@b, @_@1)) → @b [1]
sub'(@b1, @b2, @r) → sub'#1(@b1, @b2, @r) [1]
sub'#1(::(@x, @xs), @b2, @r) → sub'#2(@b2, @r, @x, @xs) [1]
sub'#1(nil, @b2, @r) → tuple#2(nil, @r) [1]
sub'#2(::(@y, @ys), @r, @x, @xs) → sub'#3(diff(@x, @y, @r), @xs, @ys) [1]
sub'#2(nil, @r, @x, @xs) → tuple#2(nil, @r) [1]
sub'#3(tuple#2(@z, @r'), @xs, @ys) → sub'#4(sub'(@xs, @ys, @r'), @z) [1]
sub'#4(tuple#2(@zs, @s), @z) → tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1]
sub'#5(#false, @z, @zs) → ::(@z, @zs) [1]
sub'#5(#true, @z, @zs) → ::(#abs(#0), @zs) [1]
sum(@x, @y, @r) → sum#1(plus(plus(@x, @y), @r)) [1]
sum#1(@s) → sum#2(#equal(@s, #0), @s) [1]
sum#2(#false, @s) → sum#3(#equal(@s, #pos(#s(#0))), @s) [1]
sum#2(#true, @s) → tuple#2(#abs(#0), #abs(#0)) [1]
sum#3(#false, @s) → sum#4(#equal(@s, #pos(#s(#s(#0))))) [1]
sum#3(#true, @s) → tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1]
sum#4(#false) → tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1]
sum#4(#true) → tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#and(#false, #false) → #false [0]
#and(#false, #true) → #false [0]
#and(#true, #false) → #false [0]
#and(#true, #true) → #true [0]
#ckgt(#EQ) → #false [0]
#ckgt(#GT) → #true [0]
#ckgt(#LT) → #false [0]
#cklt(#EQ) → #false [0]
#cklt(#GT) → #false [0]
#cklt(#LT) → #true [0]
#compare(#0, #0) → #EQ [0]
#compare(#0, #neg(@y)) → #GT [0]
#compare(#0, #pos(@y)) → #LT [0]
#compare(#0, #s(@y)) → #LT [0]
#compare(#neg(@x), #0) → #LT [0]
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x) [0]
#compare(#neg(@x), #pos(@y)) → #LT [0]
#compare(#pos(@x), #0) → #GT [0]
#compare(#pos(@x), #neg(@y)) → #GT [0]
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y) [0]
#compare(#s(@x), #0) → #GT [0]
#compare(#s(@x), #s(@y)) → #compare(@x, @y) [0]
#div(#0, #0) → #divByZero [0]
#div(#0, #neg(@y)) → #0 [0]
#div(#0, #pos(@y)) → #0 [0]
#div(#neg(@x), #0) → #divByZero [0]
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y)) [0]
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #0) → #divByZero [0]
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y)) [0]
#eq(#0, #0) → #true [0]
#eq(#0, #neg(@y)) → #false [0]
#eq(#0, #pos(@y)) → #false [0]
#eq(#0, #s(@y)) → #false [0]
#eq(#neg(@x), #0) → #false [0]
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y) [0]
#eq(#neg(@x), #pos(@y)) → #false [0]
#eq(#pos(@x), #0) → #false [0]
#eq(#pos(@x), #neg(@y)) → #false [0]
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y) [0]
#eq(#s(@x), #0) → #false [0]
#eq(#s(@x), #s(@y)) → #eq(@x, @y) [0]
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#eq(::(@x_1, @x_2), nil) → #false [0]
#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #false [0]
#eq(nil, ::(@y_1, @y_2)) → #false [0]
#eq(nil, nil) → #true [0]
#eq(nil, tuple#2(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), nil) → #false [0]
#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natdiv(#0, #0) → #divByZero [0]
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y))) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#natsub(@x, #0) → @x [0]
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#sub(@x, #0) → @x [0]
#sub(@x, #neg(@y)) → #add(@x, #pos(@y)) [0]
#sub(@x, #pos(@y)) → #add(@x, #neg(@y)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]

The TRS has the following type information:
#abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#0 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#neg :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#pos :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#s :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#equal :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #false:#true
#eq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #false:#true
#greater :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #false:#true
#ckgt :: #EQ:#GT:#LT → #false:#true
#compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #EQ:#GT:#LT
#less :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #false:#true
#cklt :: #EQ:#GT:#LT → #false:#true
times :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
plus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
minus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
add' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
:: :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
nil :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sum :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
tuple#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
bitToInt :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
bitToInt' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
compare#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
compare#4 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#false :: #false:#true
#true :: #false:#true
compare#5 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
compare#6 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
diff :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
mod :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
diff#1 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
leq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #false:#true
mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
mult#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
mult#3 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
mult3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → a → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sub'#5 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sum#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sum#2 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sum#3 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
sum#4 :: #false:#true → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#and :: #false:#true → #false:#true → #false:#true
#EQ :: #EQ:#GT:#LT
#GT :: #EQ:#GT:#LT
#LT :: #EQ:#GT:#LT
#divByZero :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero
#natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero

Rewrite Strategy: INNERMOST

(7) CompletionProof (UPPER BOUND(ID) transformation)

The transformation into a RNTS is sound, since:

(a) The obligation is a constructor system where every type has a constant constructor,

(b) The following defined symbols do not have to be completely defined, as they can never occur inside other defined symbols:


bitToInt
leq
mult3
sub
sub#1

(c) The following functions are completely defined:

mult
plus
#equal
#abs
times
bitToInt'
div
diff
compare
#less
sum
#greater
minus
sub'
bitToInt'#1
sum#1
sub'#1
sum#2
mod
diff#1
compare#1
mult#1
sub'#2
sum#3
sum#4
mult#2
compare#2
sub'#3
mult#3
sub'#4
compare#3
add
sub'#5
add'
compare#4
add'#1
compare#5
compare#6
add'#2
add'#3
#add
#and
#ckgt
#cklt
#compare
#div
#eq
#mult
#natdiv
#natmult
#natsub
#pred
#sub
#succ

Due to the following rules being added:

#add(v0, v1) → null_#add [0]
#and(v0, v1) → null_#and [0]
#ckgt(v0) → null_#ckgt [0]
#cklt(v0) → null_#cklt [0]
#compare(v0, v1) → null_#compare [0]
#div(v0, v1) → null_#div [0]
#eq(v0, v1) → null_#eq [0]
#mult(v0, v1) → null_#mult [0]
#natdiv(v0, v1) → null_#natdiv [0]
#natmult(v0, v1) → null_#natmult [0]
#natsub(v0, v1) → null_#natsub [0]
#pred(v0) → null_#pred [0]
#sub(v0, v1) → null_#sub [0]
#succ(v0) → null_#succ [0]
#abs(v0) → null_#abs [0]
bitToInt'#1(v0, v1) → null_bitToInt'#1 [0]
sub'#1(v0, v1, v2) → null_sub'#1 [0]
sum#2(v0, v1) → null_sum#2 [0]
diff#1(v0) → null_diff#1 [0]
compare#1(v0, v1) → null_compare#1 [0]
mult#1(v0, v1) → null_mult#1 [0]
sub'#2(v0, v1, v2, v3) → null_sub'#2 [0]
sum#3(v0, v1) → null_sum#3 [0]
sum#4(v0) → null_sum#4 [0]
compare#2(v0, v1, v2) → null_compare#2 [0]
sub'#3(v0, v1, v2) → null_sub'#3 [0]
mult#3(v0, v1, v2) → null_mult#3 [0]
sub'#4(v0, v1) → null_sub'#4 [0]
sub'#5(v0, v1, v2) → null_sub'#5 [0]
compare#4(v0, v1, v2, v3) → null_compare#4 [0]
add'#1(v0, v1, v2) → null_add'#1 [0]
compare#5(v0, v1, v2) → null_compare#5 [0]
compare#6(v0) → null_compare#6 [0]
add'#2(v0, v1, v2, v3) → null_add'#2 [0]
add'#3(v0, v1, v2) → null_add'#3 [0]

And the following fresh constants:

null_#add, null_#and, null_#ckgt, null_#cklt, null_#compare, null_#div, null_#eq, null_#mult, null_#natdiv, null_#natmult, null_#natsub, null_#pred, null_#sub, null_#succ, null_#abs, null_bitToInt'#1, null_sub'#1, null_sum#2, null_diff#1, null_compare#1, null_mult#1, null_sub'#2, null_sum#3, null_sum#4, null_compare#2, null_sub'#3, null_mult#3, null_sub'#4, null_sub'#5, null_compare#4, null_add'#1, null_compare#5, null_compare#6, null_add'#2, null_add'#3, const

(8) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

#abs(#0) → #0 [1]
#abs(#neg(@x)) → #pos(@x) [1]
#abs(#pos(@x)) → #pos(@x) [1]
#abs(#s(@x)) → #pos(#s(@x)) [1]
#equal(@x, @y) → #eq(@x, @y) [1]
#greater(@x, @y) → #ckgt(#compare(@x, @y)) [1]
#less(@x, @y) → #cklt(#compare(@x, @y)) [1]
times(@x, @y) → #mult(@x, @y) [1]
plus(@x, @y) → #add(@x, @y) [1]
minus(@x, @y) → #sub(@x, @y) [1]
add(@b1, @b2) → add'(@b1, @b2, #abs(#0)) [1]
add'(@b1, @b2, @r) → add'#1(@b1, @b2, @r) [1]
add'#1(::(@x, @xs), @b2, @r) → add'#2(@b2, @r, @x, @xs) [1]
add'#1(nil, @b2, @r) → nil [1]
add'#2(::(@y, @ys), @r, @x, @xs) → add'#3(sum(@x, @y, @r), @xs, @ys) [1]
add'#2(nil, @r, @x, @xs) → nil [1]
add'#3(tuple#2(@z, @r'), @xs, @ys) → ::(@z, add'(@xs, @ys, @r')) [1]
bitToInt(@b) → bitToInt'(@b, #abs(#pos(#s(#0)))) [1]
bitToInt'(@b, @n) → bitToInt'#1(@b, @n) [1]
bitToInt'#1(::(@x, @xs), @n) → plus(times(@x, @n), bitToInt'(@xs, times(@n, #pos(#s(#s(#0)))))) [1]
bitToInt'#1(nil, @n) → #abs(#0) [1]
compare(@b1, @b2) → compare#1(@b1, @b2) [1]
compare#1(::(@x, @xs), @b2) → compare#2(@b2, @x, @xs) [1]
compare#1(nil, @b2) → #abs(#0) [1]
compare#2(::(@y, @ys), @x, @xs) → compare#3(compare(@xs, @ys), @x, @y) [1]
compare#2(nil, @x, @xs) → #abs(#0) [1]
compare#3(@r, @x, @y) → compare#4(#equal(@r, #0), @r, @x, @y) [1]
compare#4(#false, @r, @x, @y) → @r [1]
compare#4(#true, @r, @x, @y) → compare#5(#less(@x, @y), @x, @y) [1]
compare#5(#false, @x, @y) → compare#6(#greater(@x, @y)) [1]
compare#5(#true, @x, @y) → minus(#0, #pos(#s(#0))) [1]
compare#6(#false) → #abs(#0) [1]
compare#6(#true) → #abs(#pos(#s(#0))) [1]
diff(@x, @y, @r) → tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))) [1]
diff#1(#false) → #abs(#0) [1]
diff#1(#true) → #abs(#pos(#s(#0))) [1]
div(@x, @y) → #div(@x, @y) [1]
leq(@b1, @b2) → #less(compare(@b1, @b2), #pos(#s(#0))) [1]
mod(@x, @y) → minus(@x, times(@x, div(@x, @y))) [1]
mult(@b1, @b2) → mult#1(@b1, @b2) [1]
mult#1(::(@x, @xs), @b2) → mult#2(::(#abs(#0), mult(@xs, @b2)), @b2, @x) [1]
mult#1(nil, @b2) → nil [1]
mult#2(@zs, @b2, @x) → mult#3(#equal(@x, #pos(#s(#0))), @b2, @zs) [1]
mult#3(#false, @b2, @zs) → @zs [1]
mult#3(#true, @b2, @zs) → add(@b2, @zs) [1]
mult3(@b1, @b2, @b3) → mult(mult(@b1, @b2), @b2) [1]
sub(@b1, @b2) → sub#1(sub'(@b1, @b2, #abs(#0))) [1]
sub#1(tuple#2(@b, @_@1)) → @b [1]
sub'(@b1, @b2, @r) → sub'#1(@b1, @b2, @r) [1]
sub'#1(::(@x, @xs), @b2, @r) → sub'#2(@b2, @r, @x, @xs) [1]
sub'#1(nil, @b2, @r) → tuple#2(nil, @r) [1]
sub'#2(::(@y, @ys), @r, @x, @xs) → sub'#3(diff(@x, @y, @r), @xs, @ys) [1]
sub'#2(nil, @r, @x, @xs) → tuple#2(nil, @r) [1]
sub'#3(tuple#2(@z, @r'), @xs, @ys) → sub'#4(sub'(@xs, @ys, @r'), @z) [1]
sub'#4(tuple#2(@zs, @s), @z) → tuple#2(sub'#5(#equal(@s, #pos(#s(#0))), @z, @zs), @s) [1]
sub'#5(#false, @z, @zs) → ::(@z, @zs) [1]
sub'#5(#true, @z, @zs) → ::(#abs(#0), @zs) [1]
sum(@x, @y, @r) → sum#1(plus(plus(@x, @y), @r)) [1]
sum#1(@s) → sum#2(#equal(@s, #0), @s) [1]
sum#2(#false, @s) → sum#3(#equal(@s, #pos(#s(#0))), @s) [1]
sum#2(#true, @s) → tuple#2(#abs(#0), #abs(#0)) [1]
sum#3(#false, @s) → sum#4(#equal(@s, #pos(#s(#s(#0))))) [1]
sum#3(#true, @s) → tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1]
sum#4(#false) → tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1]
sum#4(#true) → tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(#add(#pos(#s(@x)), @y)) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(#add(#pos(#s(@x)), @y)) [0]
#and(#false, #false) → #false [0]
#and(#false, #true) → #false [0]
#and(#true, #false) → #false [0]
#and(#true, #true) → #true [0]
#ckgt(#EQ) → #false [0]
#ckgt(#GT) → #true [0]
#ckgt(#LT) → #false [0]
#cklt(#EQ) → #false [0]
#cklt(#GT) → #false [0]
#cklt(#LT) → #true [0]
#compare(#0, #0) → #EQ [0]
#compare(#0, #neg(@y)) → #GT [0]
#compare(#0, #pos(@y)) → #LT [0]
#compare(#0, #s(@y)) → #LT [0]
#compare(#neg(@x), #0) → #LT [0]
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x) [0]
#compare(#neg(@x), #pos(@y)) → #LT [0]
#compare(#pos(@x), #0) → #GT [0]
#compare(#pos(@x), #neg(@y)) → #GT [0]
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y) [0]
#compare(#s(@x), #0) → #GT [0]
#compare(#s(@x), #s(@y)) → #compare(@x, @y) [0]
#div(#0, #0) → #divByZero [0]
#div(#0, #neg(@y)) → #0 [0]
#div(#0, #pos(@y)) → #0 [0]
#div(#neg(@x), #0) → #divByZero [0]
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y)) [0]
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #0) → #divByZero [0]
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y)) [0]
#eq(#0, #0) → #true [0]
#eq(#0, #neg(@y)) → #false [0]
#eq(#0, #pos(@y)) → #false [0]
#eq(#0, #s(@y)) → #false [0]
#eq(#neg(@x), #0) → #false [0]
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y) [0]
#eq(#neg(@x), #pos(@y)) → #false [0]
#eq(#pos(@x), #0) → #false [0]
#eq(#pos(@x), #neg(@y)) → #false [0]
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y) [0]
#eq(#s(@x), #0) → #false [0]
#eq(#s(@x), #s(@y)) → #eq(@x, @y) [0]
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#eq(::(@x_1, @x_2), nil) → #false [0]
#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #false [0]
#eq(nil, ::(@y_1, @y_2)) → #false [0]
#eq(nil, nil) → #true [0]
#eq(nil, tuple#2(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), nil) → #false [0]
#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natdiv(#0, #0) → #divByZero [0]
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(#natsub(@x, @y), #s(@y))) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(@x), @y) → #add(#pos(@y), #natmult(@x, @y)) [0]
#natsub(@x, #0) → @x [0]
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#sub(@x, #0) → @x [0]
#sub(@x, #neg(@y)) → #add(@x, #pos(@y)) [0]
#sub(@x, #pos(@y)) → #add(@x, #neg(@y)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]
#add(v0, v1) → null_#add [0]
#and(v0, v1) → null_#and [0]
#ckgt(v0) → null_#ckgt [0]
#cklt(v0) → null_#cklt [0]
#compare(v0, v1) → null_#compare [0]
#div(v0, v1) → null_#div [0]
#eq(v0, v1) → null_#eq [0]
#mult(v0, v1) → null_#mult [0]
#natdiv(v0, v1) → null_#natdiv [0]
#natmult(v0, v1) → null_#natmult [0]
#natsub(v0, v1) → null_#natsub [0]
#pred(v0) → null_#pred [0]
#sub(v0, v1) → null_#sub [0]
#succ(v0) → null_#succ [0]
#abs(v0) → null_#abs [0]
bitToInt'#1(v0, v1) → null_bitToInt'#1 [0]
sub'#1(v0, v1, v2) → null_sub'#1 [0]
sum#2(v0, v1) → null_sum#2 [0]
diff#1(v0) → null_diff#1 [0]
compare#1(v0, v1) → null_compare#1 [0]
mult#1(v0, v1) → null_mult#1 [0]
sub'#2(v0, v1, v2, v3) → null_sub'#2 [0]
sum#3(v0, v1) → null_sum#3 [0]
sum#4(v0) → null_sum#4 [0]
compare#2(v0, v1, v2) → null_compare#2 [0]
sub'#3(v0, v1, v2) → null_sub'#3 [0]
mult#3(v0, v1, v2) → null_mult#3 [0]
sub'#4(v0, v1) → null_sub'#4 [0]
sub'#5(v0, v1, v2) → null_sub'#5 [0]
compare#4(v0, v1, v2, v3) → null_compare#4 [0]
add'#1(v0, v1, v2) → null_add'#1 [0]
compare#5(v0, v1, v2) → null_compare#5 [0]
compare#6(v0) → null_compare#6 [0]
add'#2(v0, v1, v2, v3) → null_add'#2 [0]
add'#3(v0, v1, v2) → null_add'#3 [0]

The TRS has the following type information:
#abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#0 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#neg :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#pos :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#s :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#equal :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#eq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#greater :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#ckgt :: #EQ:#GT:#LT:null_#compare → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #EQ:#GT:#LT:null_#compare
#less :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#cklt :: #EQ:#GT:#LT:null_#compare → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
times :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
plus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
minus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
:: :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
nil :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
tuple#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
bitToInt :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
bitToInt' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#false :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#true :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
compare#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#6 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
diff :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mod :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
diff#1 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
leq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → a → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#2 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#EQ :: #EQ:#GT:#LT:null_#compare
#GT :: #EQ:#GT:#LT:null_#compare
#LT :: #EQ:#GT:#LT:null_#compare
#divByZero :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#ckgt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#cklt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#compare :: #EQ:#GT:#LT:null_#compare
null_#div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#eq :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sum#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_diff#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sum#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sum#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_mult#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#6 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
const :: a

Rewrite Strategy: INNERMOST

(9) NarrowingProof (BOTH BOUNDS(ID, ID) transformation)

Narrowed the inner basic terms of all right-hand sides by a single narrowing step.

(10) Obligation:

Runtime Complexity Weighted TRS where critical functions are completely defined. The underlying TRS is:

Runtime Complexity Weighted TRS with Types.
The TRS R consists of the following rules:

#abs(#0) → #0 [1]
#abs(#neg(@x)) → #pos(@x) [1]
#abs(#pos(@x)) → #pos(@x) [1]
#abs(#s(@x)) → #pos(#s(@x)) [1]
#equal(@x, @y) → #eq(@x, @y) [1]
#greater(#0, #0) → #ckgt(#EQ) [1]
#greater(#0, #neg(@y')) → #ckgt(#GT) [1]
#greater(#0, #pos(@y'')) → #ckgt(#LT) [1]
#greater(#0, #s(@y1)) → #ckgt(#LT) [1]
#greater(#neg(@x'), #0) → #ckgt(#LT) [1]
#greater(#neg(@x''), #neg(@y2)) → #ckgt(#compare(@y2, @x'')) [1]
#greater(#neg(@x1), #pos(@y3)) → #ckgt(#LT) [1]
#greater(#pos(@x2), #0) → #ckgt(#GT) [1]
#greater(#pos(@x3), #neg(@y4)) → #ckgt(#GT) [1]
#greater(#pos(@x4), #pos(@y5)) → #ckgt(#compare(@x4, @y5)) [1]
#greater(#s(@x5), #0) → #ckgt(#GT) [1]
#greater(#s(@x6), #s(@y6)) → #ckgt(#compare(@x6, @y6)) [1]
#greater(@x, @y) → #ckgt(null_#compare) [1]
#less(#0, #0) → #cklt(#EQ) [1]
#less(#0, #neg(@y7)) → #cklt(#GT) [1]
#less(#0, #pos(@y8)) → #cklt(#LT) [1]
#less(#0, #s(@y9)) → #cklt(#LT) [1]
#less(#neg(@x7), #0) → #cklt(#LT) [1]
#less(#neg(@x8), #neg(@y10)) → #cklt(#compare(@y10, @x8)) [1]
#less(#neg(@x9), #pos(@y11)) → #cklt(#LT) [1]
#less(#pos(@x10), #0) → #cklt(#GT) [1]
#less(#pos(@x11), #neg(@y12)) → #cklt(#GT) [1]
#less(#pos(@x12), #pos(@y13)) → #cklt(#compare(@x12, @y13)) [1]
#less(#s(@x13), #0) → #cklt(#GT) [1]
#less(#s(@x14), #s(@y14)) → #cklt(#compare(@x14, @y14)) [1]
#less(@x, @y) → #cklt(null_#compare) [1]
times(@x, @y) → #mult(@x, @y) [1]
plus(@x, @y) → #add(@x, @y) [1]
minus(@x, @y) → #sub(@x, @y) [1]
add(@b1, @b2) → add'(@b1, @b2, #0) [2]
add(@b1, @b2) → add'(@b1, @b2, null_#abs) [1]
add'(@b1, @b2, @r) → add'#1(@b1, @b2, @r) [1]
add'#1(::(@x, @xs), @b2, @r) → add'#2(@b2, @r, @x, @xs) [1]
add'#1(nil, @b2, @r) → nil [1]
add'#2(::(@y, @ys), @r, @x, @xs) → add'#3(sum#1(plus(plus(@x, @y), @r)), @xs, @ys) [2]
add'#2(nil, @r, @x, @xs) → nil [1]
add'#3(tuple#2(@z, @r'), @xs, @ys) → ::(@z, add'(@xs, @ys, @r')) [1]
bitToInt(@b) → bitToInt'(@b, #pos(#s(#0))) [2]
bitToInt(@b) → bitToInt'(@b, null_#abs) [1]
bitToInt'(@b, @n) → bitToInt'#1(@b, @n) [1]
bitToInt'#1(::(@x, @xs), @n) → plus(#mult(@x, @n), bitToInt'(@xs, #mult(@n, #pos(#s(#s(#0)))))) [3]
bitToInt'#1(nil, @n) → #abs(#0) [1]
compare(@b1, @b2) → compare#1(@b1, @b2) [1]
compare#1(::(@x, @xs), @b2) → compare#2(@b2, @x, @xs) [1]
compare#1(nil, @b2) → #abs(#0) [1]
compare#2(::(@y, @ys), @x, @xs) → compare#3(compare#1(@xs, @ys), @x, @y) [2]
compare#2(nil, @x, @xs) → #abs(#0) [1]
compare#3(@r, @x, @y) → compare#4(#eq(@r, #0), @r, @x, @y) [2]
compare#4(#false, @r, @x, @y) → @r [1]
compare#4(#true, @r, @x, @y) → compare#5(#cklt(#compare(@x, @y)), @x, @y) [2]
compare#5(#false, @x, @y) → compare#6(#ckgt(#compare(@x, @y))) [2]
compare#5(#true, @x, @y) → minus(#0, #pos(#s(#0))) [1]
compare#6(#false) → #abs(#0) [1]
compare#6(#true) → #abs(#pos(#s(#0))) [1]
diff(@x, @y, @r) → tuple#2(mod(plus(#add(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(#sub(@x, @y), @r), #0))) [3]
diff#1(#false) → #abs(#0) [1]
diff#1(#true) → #abs(#pos(#s(#0))) [1]
div(@x, @y) → #div(@x, @y) [1]
leq(@b1, @b2) → #less(compare#1(@b1, @b2), #pos(#s(#0))) [2]
mod(@x, @y) → minus(@x, times(@x, #div(@x, @y))) [2]
mult(@b1, @b2) → mult#1(@b1, @b2) [1]
mult#1(::(@x, @xs), @b2) → mult#2(::(#0, mult#1(@xs, @b2)), @b2, @x) [3]
mult#1(::(@x, @xs), @b2) → mult#2(::(null_#abs, mult#1(@xs, @b2)), @b2, @x) [2]
mult#1(nil, @b2) → nil [1]
mult#2(@zs, @b2, @x) → mult#3(#eq(@x, #pos(#s(#0))), @b2, @zs) [2]
mult#3(#false, @b2, @zs) → @zs [1]
mult#3(#true, @b2, @zs) → add(@b2, @zs) [1]
mult3(@b1, @b2, @b3) → mult(mult#1(@b1, @b2), @b2) [2]
sub(@b1, @b2) → sub#1(sub'(@b1, @b2, #0)) [2]
sub(@b1, @b2) → sub#1(sub'(@b1, @b2, null_#abs)) [1]
sub#1(tuple#2(@b, @_@1)) → @b [1]
sub'(@b1, @b2, @r) → sub'#1(@b1, @b2, @r) [1]
sub'#1(::(@x, @xs), @b2, @r) → sub'#2(@b2, @r, @x, @xs) [1]
sub'#1(nil, @b2, @r) → tuple#2(nil, @r) [1]
sub'#2(::(@y, @ys), @r, @x, @xs) → sub'#3(tuple#2(mod(plus(plus(@x, @y), @r), #pos(#s(#s(#0)))), diff#1(#less(minus(minus(@x, @y), @r), #0))), @xs, @ys) [2]
sub'#2(nil, @r, @x, @xs) → tuple#2(nil, @r) [1]
sub'#3(tuple#2(@z, @r'), @xs, @ys) → sub'#4(sub'#1(@xs, @ys, @r'), @z) [2]
sub'#4(tuple#2(@zs, @s), @z) → tuple#2(sub'#5(#eq(@s, #pos(#s(#0))), @z, @zs), @s) [2]
sub'#5(#false, @z, @zs) → ::(@z, @zs) [1]
sub'#5(#true, @z, @zs) → ::(#abs(#0), @zs) [1]
sum(@x, @y, @r) → sum#1(plus(#add(@x, @y), @r)) [2]
sum#1(@s) → sum#2(#eq(@s, #0), @s) [2]
sum#2(#false, @s) → sum#3(#eq(@s, #pos(#s(#0))), @s) [2]
sum#2(#true, @s) → tuple#2(#abs(#0), #abs(#0)) [1]
sum#3(#false, @s) → sum#4(#eq(@s, #pos(#s(#s(#0))))) [2]
sum#3(#true, @s) → tuple#2(#abs(#pos(#s(#0))), #abs(#0)) [1]
sum#4(#false) → tuple#2(#abs(#pos(#s(#0))), #abs(#pos(#s(#0)))) [1]
sum#4(#true) → tuple#2(#abs(#0), #abs(#pos(#s(#0)))) [1]
#add(#0, @y) → @y [0]
#add(#neg(#s(#0)), @y) → #pred(@y) [0]
#add(#neg(#s(#s(#0))), @y) → #pred(#succ(@y)) [0]
#add(#neg(#s(#s(#s(@x15)))), @y) → #pred(#succ(#add(#pos(#s(@x15)), @y))) [0]
#add(#neg(#s(#s(@x))), @y) → #pred(null_#add) [0]
#add(#pos(#s(#0)), @y) → #succ(@y) [0]
#add(#pos(#s(#s(#0))), @y) → #succ(#succ(@y)) [0]
#add(#pos(#s(#s(#s(@x16)))), @y) → #succ(#succ(#add(#pos(#s(@x16)), @y))) [0]
#add(#pos(#s(#s(@x))), @y) → #succ(null_#add) [0]
#and(#false, #false) → #false [0]
#and(#false, #true) → #false [0]
#and(#true, #false) → #false [0]
#and(#true, #true) → #true [0]
#ckgt(#EQ) → #false [0]
#ckgt(#GT) → #true [0]
#ckgt(#LT) → #false [0]
#cklt(#EQ) → #false [0]
#cklt(#GT) → #false [0]
#cklt(#LT) → #true [0]
#compare(#0, #0) → #EQ [0]
#compare(#0, #neg(@y)) → #GT [0]
#compare(#0, #pos(@y)) → #LT [0]
#compare(#0, #s(@y)) → #LT [0]
#compare(#neg(@x), #0) → #LT [0]
#compare(#neg(@x), #neg(@y)) → #compare(@y, @x) [0]
#compare(#neg(@x), #pos(@y)) → #LT [0]
#compare(#pos(@x), #0) → #GT [0]
#compare(#pos(@x), #neg(@y)) → #GT [0]
#compare(#pos(@x), #pos(@y)) → #compare(@x, @y) [0]
#compare(#s(@x), #0) → #GT [0]
#compare(#s(@x), #s(@y)) → #compare(@x, @y) [0]
#div(#0, #0) → #divByZero [0]
#div(#0, #neg(@y)) → #0 [0]
#div(#0, #pos(@y)) → #0 [0]
#div(#neg(@x), #0) → #divByZero [0]
#div(#neg(@x), #neg(@y)) → #pos(#natdiv(@x, @y)) [0]
#div(#neg(@x), #pos(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #0) → #divByZero [0]
#div(#pos(@x), #neg(@y)) → #neg(#natdiv(@x, @y)) [0]
#div(#pos(@x), #pos(@y)) → #pos(#natdiv(@x, @y)) [0]
#eq(#0, #0) → #true [0]
#eq(#0, #neg(@y)) → #false [0]
#eq(#0, #pos(@y)) → #false [0]
#eq(#0, #s(@y)) → #false [0]
#eq(#neg(@x), #0) → #false [0]
#eq(#neg(@x), #neg(@y)) → #eq(@x, @y) [0]
#eq(#neg(@x), #pos(@y)) → #false [0]
#eq(#pos(@x), #0) → #false [0]
#eq(#pos(@x), #neg(@y)) → #false [0]
#eq(#pos(@x), #pos(@y)) → #eq(@x, @y) [0]
#eq(#s(@x), #0) → #false [0]
#eq(#s(@x), #s(@y)) → #eq(@x, @y) [0]
#eq(::(@x_1, @x_2), ::(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#eq(::(@x_1, @x_2), nil) → #false [0]
#eq(::(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #false [0]
#eq(nil, ::(@y_1, @y_2)) → #false [0]
#eq(nil, nil) → #true [0]
#eq(nil, tuple#2(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), ::(@y_1, @y_2)) → #false [0]
#eq(tuple#2(@x_1, @x_2), nil) → #false [0]
#eq(tuple#2(@x_1, @x_2), tuple#2(@y_1, @y_2)) → #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) [0]
#mult(#0, #0) → #0 [0]
#mult(#0, #neg(@y)) → #0 [0]
#mult(#0, #pos(@y)) → #0 [0]
#mult(#neg(@x), #0) → #0 [0]
#mult(#neg(@x), #neg(@y)) → #pos(#natmult(@x, @y)) [0]
#mult(#neg(@x), #pos(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #0) → #0 [0]
#mult(#pos(@x), #neg(@y)) → #neg(#natmult(@x, @y)) [0]
#mult(#pos(@x), #pos(@y)) → #pos(#natmult(@x, @y)) [0]
#natdiv(#0, #0) → #divByZero [0]
#natdiv(#s(@x), #s(#0)) → #s(#natdiv(@x, #s(#0))) [0]
#natdiv(#s(#s(@x385)), #s(#s(@y383))) → #s(#natdiv(#natsub(@x385, @y383), #s(#s(@y383)))) [0]
#natdiv(#s(@x), #s(@y)) → #s(#natdiv(null_#natsub, #s(@y))) [0]
#natmult(#0, @y) → #0 [0]
#natmult(#s(#0), @y) → #add(#pos(@y), #0) [0]
#natmult(#s(#s(@x386)), @y) → #add(#pos(@y), #add(#pos(@y), #natmult(@x386, @y))) [0]
#natmult(#s(@x), @y) → #add(#pos(@y), null_#natmult) [0]
#natsub(@x, #0) → @x [0]
#natsub(#s(@x), #s(@y)) → #natsub(@x, @y) [0]
#pred(#0) → #neg(#s(#0)) [0]
#pred(#neg(#s(@x))) → #neg(#s(#s(@x))) [0]
#pred(#pos(#s(#0))) → #0 [0]
#pred(#pos(#s(#s(@x)))) → #pos(#s(@x)) [0]
#sub(@x, #0) → @x [0]
#sub(@x, #neg(@y)) → #add(@x, #pos(@y)) [0]
#sub(@x, #pos(@y)) → #add(@x, #neg(@y)) [0]
#succ(#0) → #pos(#s(#0)) [0]
#succ(#neg(#s(#0))) → #0 [0]
#succ(#neg(#s(#s(@x)))) → #neg(#s(@x)) [0]
#succ(#pos(#s(@x))) → #pos(#s(#s(@x))) [0]
#add(v0, v1) → null_#add [0]
#and(v0, v1) → null_#and [0]
#ckgt(v0) → null_#ckgt [0]
#cklt(v0) → null_#cklt [0]
#compare(v0, v1) → null_#compare [0]
#div(v0, v1) → null_#div [0]
#eq(v0, v1) → null_#eq [0]
#mult(v0, v1) → null_#mult [0]
#natdiv(v0, v1) → null_#natdiv [0]
#natmult(v0, v1) → null_#natmult [0]
#natsub(v0, v1) → null_#natsub [0]
#pred(v0) → null_#pred [0]
#sub(v0, v1) → null_#sub [0]
#succ(v0) → null_#succ [0]
#abs(v0) → null_#abs [0]
bitToInt'#1(v0, v1) → null_bitToInt'#1 [0]
sub'#1(v0, v1, v2) → null_sub'#1 [0]
sum#2(v0, v1) → null_sum#2 [0]
diff#1(v0) → null_diff#1 [0]
compare#1(v0, v1) → null_compare#1 [0]
mult#1(v0, v1) → null_mult#1 [0]
sub'#2(v0, v1, v2, v3) → null_sub'#2 [0]
sum#3(v0, v1) → null_sum#3 [0]
sum#4(v0) → null_sum#4 [0]
compare#2(v0, v1, v2) → null_compare#2 [0]
sub'#3(v0, v1, v2) → null_sub'#3 [0]
mult#3(v0, v1, v2) → null_mult#3 [0]
sub'#4(v0, v1) → null_sub'#4 [0]
sub'#5(v0, v1, v2) → null_sub'#5 [0]
compare#4(v0, v1, v2, v3) → null_compare#4 [0]
add'#1(v0, v1, v2) → null_add'#1 [0]
compare#5(v0, v1, v2) → null_compare#5 [0]
compare#6(v0) → null_compare#6 [0]
add'#2(v0, v1, v2, v3) → null_add'#2 [0]
add'#3(v0, v1, v2) → null_add'#3 [0]

The TRS has the following type information:
#abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#0 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#neg :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#pos :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#s :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#equal :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#eq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#greater :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#ckgt :: #EQ:#GT:#LT:null_#compare → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #EQ:#GT:#LT:null_#compare
#less :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#cklt :: #EQ:#GT:#LT:null_#compare → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
times :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
plus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
minus :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
:: :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
nil :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
tuple#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
bitToInt :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
bitToInt' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#false :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#true :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
compare#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
compare#6 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
diff :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mod :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
diff#1 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
leq :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
mult3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → a → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub' :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sub'#5 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#2 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#3 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
sum#4 :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq → #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
#EQ :: #EQ:#GT:#LT:null_#compare
#GT :: #EQ:#GT:#LT:null_#compare
#LT :: #EQ:#GT:#LT:null_#compare
#divByZero :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
#natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3 → #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#add :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#and :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#ckgt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#cklt :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#compare :: #EQ:#GT:#LT:null_#compare
null_#div :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#eq :: #false:#true:null_#and:null_#ckgt:null_#cklt:null_#eq
null_#mult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#natdiv :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#natmult :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#natsub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#pred :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#sub :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#succ :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_#abs :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_bitToInt'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sum#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_diff#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_mult#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sum#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sum#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_mult#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_sub'#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#4 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_add'#1 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#5 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_compare#6 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_add'#2 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
null_add'#3 :: #0:#neg:#pos:#s::::nil:tuple#2:#divByZero:null_#add:null_#div:null_#mult:null_#natdiv:null_#natmult:null_#natsub:null_#pred:null_#sub:null_#succ:null_#abs:null_bitToInt'#1:null_sub'#1:null_sum#2:null_diff#1:null_compare#1:null_mult#1:null_sub'#2:null_sum#3:null_sum#4:null_compare#2:null_sub'#3:null_mult#3:null_sub'#4:null_sub'#5:null_compare#4:null_add'#1:null_compare#5:null_compare#6:null_add'#2:null_add'#3
const :: a

Rewrite Strategy: INNERMOST

(11) CpxTypedWeightedTrsToRntsProof (UPPER BOUND(ID) transformation)

Transformed the TRS into an over-approximating RNTS by (improved) Size Abstraction.
The constant constructors are abstracted as follows:

#0 => 0
nil => 2
#false => 1
#true => 2
#EQ => 1
#GT => 2
#LT => 3
#divByZero => 1
null_#add => 0
null_#and => 0
null_#ckgt => 0
null_#cklt => 0
null_#compare => 0
null_#div => 0
null_#eq => 0
null_#mult => 0
null_#natdiv => 0
null_#natmult => 0
null_#natsub => 0
null_#pred => 0
null_#sub => 0
null_#succ => 0
null_#abs => 0
null_bitToInt'#1 => 0
null_sub'#1 => 0
null_sum#2 => 0
null_diff#1 => 0
null_compare#1 => 0
null_mult#1 => 0
null_sub'#2 => 0
null_sum#3 => 0
null_sum#4 => 0
null_compare#2 => 0
null_sub'#3 => 0
null_mult#3 => 0
null_sub'#4 => 0
null_sub'#5 => 0
null_compare#4 => 0
null_add'#1 => 0
null_compare#5 => 0
null_compare#6 => 0
null_add'#2 => 0
null_add'#3 => 0
const => 0

(12) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#abs(z) -{ 1 }→ 1 + @x :|: @x >= 0, z = 1 + @x
#abs(z) -{ 1 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + @x
#add(z, z') -{ 0 }→ @y :|: z' = @y, z = 0, @y >= 0
#add(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#add(z, z') -{ 0 }→ #succ(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0
#add(z, z') -{ 0 }→ #succ(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0
#add(z, z') -{ 0 }→ #succ(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + @x16), @y))) :|: @x16 >= 0, z' = @y, z = 1 + (1 + (1 + (1 + @x16))), @y >= 0
#add(z, z') -{ 0 }→ #pred(@y) :|: z = 1 + (1 + 0), z' = @y, @y >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0
#add(z, z') -{ 0 }→ #pred(#succ(@y)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + @x15), @y))) :|: z = 1 + (1 + (1 + (1 + @x15))), z' = @y, @x15 >= 0, @y >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 3 :|: @x >= 0, z = 1 + @x, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 2 :|: @x >= 0, z = 1 + @x, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#compare(z, z') -{ 0 }→ #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: @x >= 0, z = 1 + @x, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' = 1 + @y, @y >= 0
#div(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#div(z, z') -{ 0 }→ 1 + #natdiv(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x >= 0, z = 1 + @x, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#eq(z, z') -{ 0 }→ #eq(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
#greater(z, z') -{ 1 }→ #ckgt(3) :|: z' = 1 + @y'', @y'' >= 0, z = 0
#greater(z, z') -{ 1 }→ #ckgt(3) :|: z' = 1 + @y1, @y1 >= 0, z = 0
#greater(z, z') -{ 1 }→ #ckgt(3) :|: z = 1 + @x', @x' >= 0, z' = 0
#greater(z, z') -{ 1 }→ #ckgt(3) :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1
#greater(z, z') -{ 1 }→ #ckgt(2) :|: @y' >= 0, z' = 1 + @y', z = 0
#greater(z, z') -{ 1 }→ #ckgt(2) :|: @x2 >= 0, z = 1 + @x2, z' = 0
#greater(z, z') -{ 1 }→ #ckgt(2) :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0
#greater(z, z') -{ 1 }→ #ckgt(2) :|: z = 1 + @x5, @x5 >= 0, z' = 0
#greater(z, z') -{ 1 }→ #ckgt(1) :|: z = 0, z' = 0
#greater(z, z') -{ 1 }→ #ckgt(0) :|: z = @x, @x >= 0, z' = @y, @y >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0
#less(z, z') -{ 1 }→ #cklt(3) :|: @y8 >= 0, z = 0, z' = 1 + @y8
#less(z, z') -{ 1 }→ #cklt(3) :|: @y9 >= 0, z' = 1 + @y9, z = 0
#less(z, z') -{ 1 }→ #cklt(3) :|: z = 1 + @x7, @x7 >= 0, z' = 0
#less(z, z') -{ 1 }→ #cklt(3) :|: @y11 >= 0, z = 1 + @x9, z' = 1 + @y11, @x9 >= 0
#less(z, z') -{ 1 }→ #cklt(2) :|: @y7 >= 0, z = 0, z' = 1 + @y7
#less(z, z') -{ 1 }→ #cklt(2) :|: z = 1 + @x10, @x10 >= 0, z' = 0
#less(z, z') -{ 1 }→ #cklt(2) :|: z = 1 + @x11, @x11 >= 0, @y12 >= 0, z' = 1 + @y12
#less(z, z') -{ 1 }→ #cklt(2) :|: z = 1 + @x13, @x13 >= 0, z' = 0
#less(z, z') -{ 1 }→ #cklt(1) :|: z = 0, z' = 0
#less(z, z') -{ 1 }→ #cklt(0) :|: z = @x, @x >= 0, z' = @y, @y >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(@x12, @y13)) :|: @x12 >= 0, z = 1 + @x12, @y13 >= 0, z' = 1 + @y13
#less(z, z') -{ 1 }→ #cklt(#compare(@x14, @y14)) :|: z = 1 + @x14, @x14 >= 0, @y14 >= 0, z' = 1 + @y14
#less(z, z') -{ 1 }→ #cklt(#compare(@y10, @x8)) :|: z' = 1 + @y10, @y10 >= 0, z = 1 + @x8, @x8 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 1 + @y, @y >= 0
#mult(z, z') -{ 0 }→ 0 :|: @x >= 0, z = 1 + @x, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#mult(z, z') -{ 0 }→ 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(@x, 1 + 0) :|: @x >= 0, z = 1 + @x, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(@x385, @y383), 1 + (1 + @y383)) :|: z = 1 + (1 + @x385), @x385 >= 0, z' = 1 + (1 + @y383), @y383 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z' = @y, z = 0, @y >= 0
#natmult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, #add(1 + @y, #natmult(@x386, @y))) :|: @x386 >= 0, z' = @y, @y >= 0, z = 1 + (1 + @x386)
#natsub(z, z') -{ 0 }→ @x :|: z = @x, @x >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natsub(z, z') -{ 0 }→ #natsub(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#pred(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#sub(z, z') -{ 0 }→ @x :|: z = @x, @x >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#sub(z, z') -{ 0 }→ #add(@x, 1 + @y) :|: z = @x, @x >= 0, z' = 1 + @y, @y >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#succ(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
add(z, z') -{ 2 }→ add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
add(z, z') -{ 1 }→ add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
add'(z, z', z'') -{ 1 }→ add'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(@x, @y), @r)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(@xs, @ys, @r') :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(@b, 0) :|: z = @b, @b >= 0
bitToInt(z) -{ 2 }→ bitToInt'(@b, 1 + (1 + 0)) :|: z = @b, @b >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(@b, @n) :|: z' = @n, @n >= 0, z = @b, @b >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, @n), bitToInt'(@xs, #mult(@n, 1 + (1 + (1 + 0))))) :|: z' = @n, @x >= 0, z = 1 + @x + @xs, @n >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
bitToInt'#1(z, z') -{ 1 }→ #abs(0) :|: z = 2, z' = @n, @n >= 0
compare(z, z') -{ 1 }→ compare#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
compare#1(z, z') -{ 1 }→ compare#2(@b2, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0
compare#1(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
compare#1(z, z') -{ 1 }→ #abs(0) :|: z = 2, z' = @b2, @b2 >= 0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(@xs, @ys), @x, @y) :|: z = 1 + @y + @ys, @x >= 0, @xs >= 0, @y >= 0, z' = @x, z'' = @xs, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
compare#2(z, z', z'') -{ 1 }→ #abs(0) :|: z = 2, @x >= 0, @xs >= 0, z' = @x, z'' = @xs
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(@r, 0), @r, @x, @y) :|: @x >= 0, z = @r, @y >= 0, z' = @x, @r >= 0, z'' = @y
compare#4(z, z', z'', z1) -{ 1 }→ @r :|: z' = @r, @x >= 0, z = 1, z1 = @y, z'' = @x, @y >= 0, @r >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(@x, @y)), @x, @y) :|: z = 2, z' = @r, @x >= 0, z1 = @y, z'' = @x, @y >= 0, @r >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, @x >= 0, @y >= 0, z' = @x, z'' = @y
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(@x, @y))) :|: @x >= 0, z = 1, @y >= 0, z' = @x, z'' = @y
compare#5(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
compare#6(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
compare#6(z) -{ 1 }→ #abs(0) :|: z = 1
compare#6(z) -{ 1 }→ #abs(1 + (1 + 0)) :|: z = 2
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(@x, @y), @r), 0)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0
diff#1(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
diff#1(z) -{ 1 }→ #abs(0) :|: z = 1
diff#1(z) -{ 1 }→ #abs(1 + (1 + 0)) :|: z = 2
div(z, z') -{ 1 }→ #div(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
leq(z, z') -{ 2 }→ #less(compare#1(@b1, @b2), 1 + (1 + 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
minus(z, z') -{ 1 }→ #sub(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
mod(z, z') -{ 2 }→ minus(@x, times(@x, #div(@x, @y))) :|: z = @x, @x >= 0, z' = @y, @y >= 0
mult(z, z') -{ 1 }→ mult#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' = @b2, @b2 >= 0
mult#1(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(@x, 1 + (1 + 0)), @b2, @zs) :|: z' = @b2, @x >= 0, z = @zs, @b2 >= 0, @zs >= 0, z'' = @x
mult#3(z, z', z'') -{ 1 }→ @zs :|: z' = @b2, z = 1, @b2 >= 0, @zs >= 0, z'' = @zs
mult#3(z, z', z'') -{ 1 }→ add(@b2, @zs) :|: z = 2, z' = @b2, @b2 >= 0, @zs >= 0, z'' = @zs
mult#3(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(@b1, @b2), @b2) :|: z' = @b2, z'' = @b3, @b3 >= 0, @b2 >= 0, z = @b1, @b1 >= 0
plus(z, z') -{ 1 }→ #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + @r :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(@x, @y), @r), 0)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + @r :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(@xs, @ys, @r'), @z) :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), @z, @zs) + @s :|: z' = @z, z = 1 + @zs + @s, @zs >= 0, @s >= 0, @z >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + @z + @zs :|: z' = @z, z = 1, @zs >= 0, z'' = @zs, @z >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + #abs(0) + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(@x, @y), @r)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(@s, 0), @s) :|: z = @s, @s >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(@s, 1 + (1 + 0)), @s) :|: z = 1, z' = @s, @s >= 0
sum#2(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
sum#2(z, z') -{ 1 }→ 1 + #abs(0) + #abs(0) :|: z = 2, z' = @s, @s >= 0
sum#3(z, z') -{ 2 }→ sum#4(#eq(@s, 1 + (1 + (1 + 0)))) :|: z = 1, z' = @s, @s >= 0
sum#3(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
sum#3(z, z') -{ 1 }→ 1 + #abs(1 + (1 + 0)) + #abs(0) :|: z = 2, z' = @s, @s >= 0
sum#4(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
sum#4(z) -{ 1 }→ 1 + #abs(0) + #abs(1 + (1 + 0)) :|: z = 2
sum#4(z) -{ 1 }→ 1 + #abs(1 + (1 + 0)) + #abs(1 + (1 + 0)) :|: z = 1
times(z, z') -{ 1 }→ #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0

(13) InliningProof (UPPER BOUND(ID) transformation)

Inlined the following terminating rules on right-hand sides where appropriate:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 1 }→ 1 + @x :|: @x >= 0, z = 1 + @x
#abs(z) -{ 1 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + @x
#abs(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#pred(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#succ(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#succ(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
compare#6(z) -{ 1 }→ #abs(0) :|: z = 1
compare#6(z) -{ 1 }→ #abs(1 + (1 + 0)) :|: z = 2
compare#6(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
diff#1(z) -{ 1 }→ #abs(0) :|: z = 1
diff#1(z) -{ 1 }→ #abs(1 + (1 + 0)) :|: z = 2
diff#1(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
sub'#5(z, z', z'') -{ 1 }→ 1 + @z + @zs :|: z' = @z, z = 1, @zs >= 0, z'' = @zs, @z >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + #abs(0) + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
sum#4(z) -{ 1 }→ 1 + #abs(1 + (1 + 0)) + #abs(1 + (1 + 0)) :|: z = 1
sum#4(z) -{ 1 }→ 1 + #abs(0) + #abs(1 + (1 + 0)) :|: z = 2
sum#4(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0

(14) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#abs(z) -{ 1 }→ 1 + @x :|: @x >= 0, z = 1 + @x
#abs(z) -{ 1 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + @x
#add(z, z') -{ 0 }→ @y :|: z' = @y, z = 0, @y >= 0
#add(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' = @y, @y >= 0, v0 >= 0, @y = v0
#add(z, z') -{ 0 }→ 0 :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), 1 + (1 + @x) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), v0 >= 0, 1 + (1 + @x) = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), v0 >= 0, 1 + (1 + (1 + @x)) = v0
#add(z, z') -{ 0 }→ 0 :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @y = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: @x >= 0, z' = @y, z = 1 + (1 + (1 + @x)), @y >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + 0), z' = @y, @y >= 0, @x >= 0, @y = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x)), @x' >= 0, 1 + (1 + @x) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x), @x' >= 0, 1 + (1 + (1 + @x)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + @x16), @y))) :|: @x16 >= 0, z' = @y, z = 1 + (1 + (1 + (1 + @x16))), @y >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, v0 >= 0, @y = v0
#add(z, z') -{ 0 }→ #pred(1 + (1 + @x)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + (1 + @x))
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @y = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + @x))) :|: z' = @y, z = 1 + (1 + (1 + 0)), @y >= 0, @x >= 0, @y = 1 + (1 + @x)
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + @x15), @y))) :|: z = 1 + (1 + (1 + (1 + @x15))), z' = @y, @x15 >= 0, @y >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 3 :|: @x >= 0, z = 1 + @x, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 2 :|: @x >= 0, z = 1 + @x, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#compare(z, z') -{ 0 }→ #compare(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#compare(z, z') -{ 0 }→ #compare(@y, @x) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: @x >= 0, z = 1 + @x, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' = 1 + @y, @y >= 0
#div(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#div(z, z') -{ 0 }→ 1 + #natdiv(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x >= 0, z = 1 + @x, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#eq(z, z') -{ 0 }→ #eq(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
#greater(z, z') -{ 1 }→ 2 :|: @y' >= 0, z' = 1 + @y', z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: @x2 >= 0, z = 1 + @x2, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z = 1 + @x5, @x5 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' = 1 + @y'', @y'' >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' = 1 + @y1, @y1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z = 1 + @x', @x' >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: @y' >= 0, z' = 1 + @y', z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' = 1 + @y'', @y'' >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' = 1 + @y1, @y1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z = 1 + @x', @x' >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: @y3 >= 0, @x1 >= 0, z' = 1 + @y3, z = 1 + @x1, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: @x2 >= 0, z = 1 + @x2, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: @x3 >= 0, z' = 1 + @y4, z = 1 + @x3, @y4 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z = 1 + @x5, @x5 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z = @x, @x >= 0, z' = @y, @y >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(@x4, @y5)) :|: z' = 1 + @y5, @y5 >= 0, z = 1 + @x4, @x4 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(@x6, @y6)) :|: z = 1 + @x6, z' = 1 + @y6, @x6 >= 0, @y6 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(@y2, @x'')) :|: z = 1 + @x'', z' = 1 + @y2, @y2 >= 0, @x'' >= 0
#less(z, z') -{ 1 }→ 2 :|: @y8 >= 0, z = 0, z' = 1 + @y8, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: @y9 >= 0, z' = 1 + @y9, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z = 1 + @x7, @x7 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: @y11 >= 0, z = 1 + @x9, z' = 1 + @y11, @x9 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: @y7 >= 0, z = 0, z' = 1 + @y7, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z = 1 + @x10, @x10 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z = 1 + @x11, @x11 >= 0, @y12 >= 0, z' = 1 + @y12, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z = 1 + @x13, @x13 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: @y7 >= 0, z = 0, z' = 1 + @y7, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: @y8 >= 0, z = 0, z' = 1 + @y8, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: @y9 >= 0, z' = 1 + @y9, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z = 1 + @x7, @x7 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: @y11 >= 0, z = 1 + @x9, z' = 1 + @y11, @x9 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z = 1 + @x10, @x10 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z = 1 + @x11, @x11 >= 0, @y12 >= 0, z' = 1 + @y12, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z = 1 + @x13, @x13 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z = @x, @x >= 0, z' = @y, @y >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(@x12, @y13)) :|: @x12 >= 0, z = 1 + @x12, @y13 >= 0, z' = 1 + @y13
#less(z, z') -{ 1 }→ #cklt(#compare(@x14, @y14)) :|: z = 1 + @x14, @x14 >= 0, @y14 >= 0, z' = 1 + @y14
#less(z, z') -{ 1 }→ #cklt(#compare(@y10, @x8)) :|: z' = 1 + @y10, @y10 >= 0, z = 1 + @x8, @x8 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 1 + @y, @y >= 0
#mult(z, z') -{ 0 }→ 0 :|: @x >= 0, z = 1 + @x, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#mult(z, z') -{ 0 }→ 1 + #natmult(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(@x, 1 + 0) :|: @x >= 0, z = 1 + @x, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(@x385, @y383), 1 + (1 + @y383)) :|: z = 1 + (1 + @x385), @x385 >= 0, z' = 1 + (1 + @y383), @y383 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z' = @y, z = 0, @y >= 0
#natmult(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: z = 1 + 0, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, 0) :|: @x >= 0, z = 1 + @x, z' = @y, @y >= 0
#natmult(z, z') -{ 0 }→ #add(1 + @y, #add(1 + @y, #natmult(@x386, @y))) :|: @x386 >= 0, z' = @y, @y >= 0, z = 1 + (1 + @x386)
#natsub(z, z') -{ 0 }→ @x :|: z = @x, @x >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#natsub(z, z') -{ 0 }→ #natsub(@x, @y) :|: @x >= 0, z = 1 + @x, z' = 1 + @y, @y >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#pred(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
#sub(z, z') -{ 0 }→ @x :|: z = @x, @x >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
#sub(z, z') -{ 0 }→ #add(@x, 1 + @y) :|: z = @x, @x >= 0, z' = 1 + @y, @y >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
#succ(z) -{ 0 }→ 1 + (1 + @x) :|: @x >= 0, z = 1 + (1 + (1 + @x))
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + @x)) :|: @x >= 0, z = 1 + (1 + @x)
add(z, z') -{ 2 }→ add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
add(z, z') -{ 1 }→ add'(@b1, @b2, 0) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
add'(z, z', z'') -{ 1 }→ add'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(@x, @y), @r)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(@xs, @ys, @r') :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(@b, 0) :|: z = @b, @b >= 0
bitToInt(z) -{ 2 }→ bitToInt'(@b, 1 + (1 + 0)) :|: z = @b, @b >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(@b, @n) :|: z' = @n, @n >= 0, z = @b, @b >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, @n), bitToInt'(@xs, #mult(@n, 1 + (1 + (1 + 0))))) :|: z' = @n, @x >= 0, z = 1 + @x + @xs, @n >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' = @n, @n >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' = @n, @n >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
compare#1(z, z') -{ 1 }→ compare#2(@b2, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0
compare#1(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' = @b2, @b2 >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' = @b2, @b2 >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(@xs, @ys), @x, @y) :|: z = 1 + @y + @ys, @x >= 0, @xs >= 0, @y >= 0, z' = @x, z'' = @xs, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, @x >= 0, @xs >= 0, z' = @x, z'' = @xs, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, @x >= 0, @xs >= 0, z' = @x, z'' = @xs, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(@r, 0), @r, @x, @y) :|: @x >= 0, z = @r, @y >= 0, z' = @x, @r >= 0, z'' = @y
compare#4(z, z', z'', z1) -{ 1 }→ @r :|: z' = @r, @x >= 0, z = 1, z1 = @y, z'' = @x, @y >= 0, @r >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(@x, @y)), @x, @y) :|: z = 2, z' = @r, @x >= 0, z1 = @y, z'' = @x, @y >= 0, @r >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, @x >= 0, @y >= 0, z' = @x, z'' = @y
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(@x, @y))) :|: @x >= 0, z = 1, @y >= 0, z' = @x, z'' = @y
compare#5(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
compare#6(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(@x, @y), @r), 0)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0
diff#1(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
leq(z, z') -{ 2 }→ #less(compare#1(@b1, @b2), 1 + (1 + 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
minus(z, z') -{ 1 }→ #sub(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
mod(z, z') -{ 2 }→ minus(@x, times(@x, #div(@x, @y))) :|: z = @x, @x >= 0, z' = @y, @y >= 0
mult(z, z') -{ 1 }→ mult#1(@b1, @b2) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, @b2), @b2, @x) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' = @b2, @b2 >= 0
mult#1(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(@x, 1 + (1 + 0)), @b2, @zs) :|: z' = @b2, @x >= 0, z = @zs, @b2 >= 0, @zs >= 0, z'' = @x
mult#3(z, z', z'') -{ 1 }→ @zs :|: z' = @b2, z = 1, @b2 >= 0, @zs >= 0, z'' = @zs
mult#3(z, z', z'') -{ 1 }→ add(@b2, @zs) :|: z = 2, z' = @b2, @b2 >= 0, @zs >= 0, z'' = @zs
mult#3(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(@b1, @b2), @b2) :|: z' = @b2, z'' = @b3, @b3 >= 0, @b2 >= 0, z = @b1, @b1 >= 0
plus(z, z') -{ 1 }→ #add(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(@b1, @b2, 0)) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(@b1, @b2, @r) :|: z' = @b2, @b2 >= 0, z = @b1, @b1 >= 0, z'' = @r, @r >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(@b2, @r, @x, @xs) :|: z' = @b2, @x >= 0, z = 1 + @x + @xs, @xs >= 0, @b2 >= 0, z'' = @r, @r >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + @r :|: z = 2, z' = @b2, @b2 >= 0, z'' = @r, @r >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(@x, @y), @r), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(@x, @y), @r), 0)), @xs, @ys) :|: z' = @r, z = 1 + @y + @ys, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @y >= 0, @ys >= 0, @r >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z1 = v3, v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0, v3 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + @r :|: z = 2, z' = @r, @x >= 0, z1 = @xs, @xs >= 0, z'' = @x, @r >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(@xs, @ys, @r'), @z) :|: z' = @xs, z = 1 + @z + @r', @xs >= 0, z'' = @ys, @r' >= 0, @ys >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), @z, @zs) + @s :|: z' = @z, z = 1 + @zs + @s, @zs >= 0, @s >= 0, @z >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: v0 >= 0, z'' = v2, v1 >= 0, z = v0, z' = v1, v2 >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + @z + @zs :|: z' = @z, z = 1, @zs >= 0, z'' = @zs, @z >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + @zs :|: z = 2, z' = @z, @zs >= 0, z'' = @zs, @z >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(@x, @y), @r)) :|: z = @x, @x >= 0, z' = @y, z'' = @r, @y >= 0, @r >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(@s, 0), @s) :|: z = @s, @s >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(@s, 1 + (1 + 0)), @s) :|: z = 1, z' = @s, @s >= 0
sum#2(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(@s, 1 + (1 + (1 + 0)))) :|: z = 1, z' = @s, @s >= 0
sum#3(z, z') -{ 0 }→ 0 :|: v0 >= 0, v1 >= 0, z = v0, z' = v1
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' = @s, @s >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' = @s, @s >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: v0 >= 0, z = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(@x, @y) :|: z = @x, @x >= 0, z' = @y, @y >= 0

(15) SimplificationProof (BOTH BOUNDS(ID, ID) transformation)

Simplified the RNTS by moving equalities from the constraints into the right-hand sides.

(16) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

(17) CpxRntsAnalysisOrderProof (BOTH BOUNDS(ID, ID) transformation)

Found the following analysis order by SCC decomposition:

{ #ckgt }
{ sub#1 }
{ #pred }
{ #natsub }
{ compare#6 }
{ sum#4 }
{ #and }
{ sub'#5 }
{ #cklt }
{ #compare }
{ diff#1 }
{ #abs }
{ #succ }
{ #greater }
{ #add }
{ #natdiv }
{ #eq }
{ #less }
{ #sub }
{ #natmult }
{ plus }
{ #div }
{ sum#3 }
{ sub'#4 }
{ #equal }
{ minus }
{ #mult }
{ div }
{ sum#2 }
{ compare#5 }
{ times }
{ bitToInt', bitToInt'#1 }
{ sum#1 }
{ compare#4 }
{ mod }
{ bitToInt }
{ sum }
{ add'#2, add'#1, add', add'#3 }
{ compare#3 }
{ diff }
{ sub'#2, sub'#1, sub'#3 }
{ add }
{ compare#1, compare#2 }
{ sub' }
{ mult#3 }
{ leq }
{ compare }
{ sub }
{ mult#2 }
{ mult#1 }
{ mult }
{ mult3 }

(18) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#ckgt}, {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}

(19) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #ckgt
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(20) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#ckgt}, {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: ?, size: O(1) [2]

(21) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #ckgt
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(22) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]

(23) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(24) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]

(25) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: sub#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: z

(26) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub#1}, {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: ?, size: O(n1) [z]

(27) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sub#1
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(28) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]

(29) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(30) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]

(31) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #pred
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + z

(32) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#pred}, {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: ?, size: O(n1) [2 + z]

(33) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #pred
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(34) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ #pred(0) :|: z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + 0)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (z' - 3))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ #pred(1 + (1 + (1 + (z' - 2)))) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]

(35) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(36) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]

(37) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: #natsub
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: z

(38) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natsub}, {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: ?, size: O(n1) [z]

(39) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #natsub
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(40) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(#natsub(z - 2, z' - 2), 1 + (1 + (z' - 2))) :|: z - 2 >= 0, z' - 2 >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ #natsub(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]

(41) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(42) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]

(43) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: compare#6
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 3

(44) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {compare#6}, {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: ?, size: O(1) [3]

(45) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: compare#6
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(46) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]

(47) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(48) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]

(49) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sum#4
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 7

(50) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sum#4}, {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: ?, size: O(1) [7]

(51) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sum#4
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 3

(52) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]

(53) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(54) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]

(55) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #and
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(56) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#and}, {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: ?, size: O(1) [2]

(57) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #and
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(58) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]

(59) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(60) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]

(61) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sub'#5
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z' + z''

(62) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#5}, {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: ?, size: O(n1) [1 + z' + z'']

(63) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sub'#5
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(64) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']

(65) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(66) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']

(67) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #cklt
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(68) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#cklt}, {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: ?, size: O(1) [2]

(69) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #cklt
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(70) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]

(71) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(72) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]

(73) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #compare
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 3

(74) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#compare}, {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: ?, size: O(1) [3]

(75) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #compare
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(76) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#compare(z, z') -{ 0 }→ #compare(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ #compare(z' - 1, z - 1) :|: z - 1 >= 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z - 1, z' - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ #ckgt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ #cklt(#compare(z - 1, z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ #cklt(#compare(z' - 1, z - 1)) :|: z' - 1 >= 0, z - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(#cklt(#compare(z'', z1)), z'', z1) :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ compare#6(#ckgt(#compare(z', z''))) :|: z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]

(77) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(78) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]

(79) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: diff#1
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 3

(80) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {diff#1}, {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: ?, size: O(1) [3]

(81) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: diff#1
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(82) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]

(83) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(84) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]

(85) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #abs
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z

(86) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#abs}, {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: ?, size: O(n1) [1 + z]

(87) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #abs
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(88) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]

(89) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(90) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]

(91) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #succ
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + z

(92) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#succ}, {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: ?, size: O(n1) [2 + z]

(93) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #succ
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(94) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]

(95) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(96) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]

(97) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #greater
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(98) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#greater}, {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: ?, size: O(1) [2]

(99) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #greater
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(100) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]

(101) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(102) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]

(103) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: #add
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2·z + z'

(104) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#add}, {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: ?, size: O(n1) [2·z + z']

(105) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #add
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(106) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ #succ(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ #pred(#succ(#add(1 + (1 + (z - 4)), z'))) :|: z - 4 >= 0, z' >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', 0) :|: z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#sub(z, z') -{ 0 }→ #add(z, 1 + (z' - 1)) :|: z >= 0, z' - 1 >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(#add(z, z'), z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ #add(z, z') :|: z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(#add(z, z'), z'')) :|: z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']

(107) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(108) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']

(109) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #natdiv
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z

(110) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natdiv}, {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: ?, size: O(n1) [1 + z]

(111) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #natdiv
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(112) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + #natdiv(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(s3, 1 + (1 + (z' - 2))) :|: s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(0, 1 + (z' - 1)) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 + #natdiv(z - 1, 1 + 0) :|: z - 1 >= 0, z' = 1 + 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]

(113) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(114) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]

(115) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #eq
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(116) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#eq}, {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: ?, size: O(1) [2]

(117) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #eq
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(118) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#eq(z, z') -{ 0 }→ #eq(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ #and(#eq(@x_1, @y_1), #eq(@x_2, @y_2)) :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#equal(z, z') -{ 1 }→ #eq(z, z') :|: z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(#eq(z, 0), z, z', z'') :|: z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(#eq(z'', 1 + (1 + 0)), z', z) :|: z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 2 }→ 1 + sub'#5(#eq(@s, 1 + (1 + 0)), z', @zs) + @s :|: z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(#eq(z, 0), z) :|: z >= 0
sum#2(z, z') -{ 2 }→ sum#3(#eq(z', 1 + (1 + 0)), z') :|: z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 2 }→ sum#4(#eq(z', 1 + (1 + (1 + 0)))) :|: z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]

(119) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(120) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]

(121) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #less
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(122) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#less}, {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: ?, size: O(1) [2]

(123) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #less
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(124) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]

(125) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(126) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]

(127) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #sub
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2·z + z'

(128) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#sub}, {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: ?, size: O(n1) [2·z + z']

(129) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #sub
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(130) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(#sub(z, z'), z''), 0)) :|: s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ #sub(z, z') :|: z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']

(131) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(132) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']

(133) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using PUBS for: #natmult
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 2 + 4·z + 4·z·z' + 2·z'

(134) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#natmult}, {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: ?, size: O(n2) [2 + 4·z + 4·z·z' + 2·z']

(135) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #natmult
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(136) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + #natmult(z - 1, z' - 1) :|: z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ #add(1 + z', #add(1 + z', #natmult(z - 2, z'))) :|: z - 2 >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']

(137) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(138) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']

(139) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: plus
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2·z + z'

(140) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {plus}, {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: ?, size: O(n1) [2·z + z']

(141) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: plus
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(142) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 2 }→ add'#3(sum#1(plus(plus(z'', @y), z')), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 3 }→ 1 + mod(plus(s31, z''), 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 2 }→ sub'#3(1 + mod(plus(plus(z'', @y), z'), 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 2 }→ sum#1(plus(s21, z'')) :|: s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']

(143) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(144) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']

(145) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #div
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z

(146) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#div}, {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: ?, size: O(n1) [1 + z]

(147) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #div
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(148) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ #div(z, z') :|: z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, #div(z, z'))) :|: z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]

(149) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(150) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]

(151) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sum#3
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 7

(152) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sum#3}, {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: ?, size: O(1) [7]

(153) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sum#3
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 5

(154) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 2 }→ sum#3(s40, z') :|: s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]

(155) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(156) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]

(157) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sub'#4
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z + z'

(158) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#4}, {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: ?, size: O(n1) [1 + z + z']

(159) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sub'#4
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 4

(160) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']

(161) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(162) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']

(163) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: #equal
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(164) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#equal}, {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: ?, size: O(1) [2]

(165) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #equal
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(166) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]

(167) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(168) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]

(169) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: minus
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2·z + z'

(170) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {minus}, {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: ?, size: O(n1) [2·z + z']

(171) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: minus
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(172) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 1 }→ minus(0, 1 + (1 + 0)) :|: z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 4 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + diff#1(#less(minus(s50, z''), 0)) :|: s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 4 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + diff#1(#less(minus(minus(z'', @y), z'), 0)), z1, @ys) :|: s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']

(173) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(174) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']

(175) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: #mult
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 1 + 4·z·z' + 2·z'

(176) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {#mult}, {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: ?, size: O(n2) [1 + 4·z·z' + 2·z']

(177) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: #mult
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 0

(178) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(#mult(@x, z'), bitToInt'(@xs, #mult(z', 1 + (1 + (1 + 0))))) :|: @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ #mult(z, z') :|: z >= 0, z' >= 0

Function symbols to be analyzed: {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']

(179) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(180) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']

(181) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: div
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + z

(182) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {div}, {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: ?, size: O(n1) [1 + z]

(183) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: div
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(184) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]

(185) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(186) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]

(187) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sum#2
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 7

(188) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum#2}, {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: ?, size: O(1) [7]

(189) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sum#2
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 7

(190) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 2 }→ sum#2(s39, z) :|: s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]

(191) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(192) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]

(193) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: compare#5
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 3

(194) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#5}, {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: ?, size: O(1) [3]

(195) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: compare#5
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 4

(196) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 2 }→ compare#5(s16, z'', z1) :|: s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]

(197) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(198) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]

(199) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: times
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 1 + 4·z·z' + 2·z'

(200) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {times}, {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: ?, size: O(n2) [1 + 4·z·z' + 2·z']

(201) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: times
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 1

(202) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 2 }→ minus(z, times(z, s62)) :|: s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']

(203) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(204) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']

(205) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: bitToInt'
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

Computed SIZE bound using CoFloCo for: bitToInt'#1
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(206) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {bitToInt',bitToInt'#1}, {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: ?, size: INF
bitToInt'#1: runtime: ?, size: INF

(207) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using KoAT for: bitToInt'
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 8 + 10·z

Computed RUNTIME bound using CoFloCo for: bitToInt'#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + 10·z

(208) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 1 }→ bitToInt'(z, 0) :|: z >= 0
bitToInt(z) -{ 2 }→ bitToInt'(z, 1 + (1 + 0)) :|: z >= 0
bitToInt'(z, z') -{ 1 }→ bitToInt'#1(z, z') :|: z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 3 }→ plus(s73, bitToInt'(@xs, s74)) :|: s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF

(209) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(210) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF

(211) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sum#1
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 7

(212) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum#1}, {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: ?, size: O(1) [7]

(213) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sum#1
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 9

(214) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 4 }→ add'#3(sum#1(s56), z1, @ys) :|: s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 3 }→ sum#1(s57) :|: s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]

(215) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(216) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]

(217) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: compare#4
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 3 + z'

(218) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#4}, {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: ?, size: O(n1) [3 + z']

(219) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: compare#4
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 6

(220) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 2 }→ compare#4(s37, z, z', z'') :|: s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']

(221) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(222) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']

(223) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: mod
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(224) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mod}, {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: ?, size: INF

(225) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: mod
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 4

(226) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 8 }→ 1 + mod(s58, 1 + (1 + (1 + 0))) + s67 :|: s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 9 }→ sub'#3(1 + mod(s60, 1 + (1 + (1 + 0))) + s71, z1, @ys) :|: s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF

(227) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(228) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF

(229) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: bitToInt
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(230) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {bitToInt}, {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: ?, size: INF

(231) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: bitToInt
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 10 + 10·z

(232) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF

(233) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(234) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF

(235) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sum
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 7

(236) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sum}, {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: ?, size: O(1) [7]

(237) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sum
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 12

(238) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]

(239) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(240) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]

(241) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: add'#2
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 28 + 32·z1

Computed SIZE bound using KoAT for: add'#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 32·z

Computed SIZE bound using KoAT for: add'
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 32·z

Computed SIZE bound using KoAT for: add'#3
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: z + 32·z'

(242) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {add'#2,add'#1,add',add'#3}, {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: ?, size: O(n1) [28 + 32·z1]
add'#1: runtime: ?, size: O(n1) [32·z]
add': runtime: ?, size: O(n1) [32·z]
add'#3: runtime: ?, size: O(n1) [z + 32·z']

(243) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using KoAT for: add'#2
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + 48·z + 16·z1

Computed RUNTIME bound using KoAT for: add'#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 4 + 16·z + 48·z'

Computed RUNTIME bound using KoAT for: add'
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 5 + 16·z + 48·z'

Computed RUNTIME bound using CoFloCo for: add'#3
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 6 + 16·z' + 48·z''

(244) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 2 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add(z, z') -{ 1 }→ add'(z, z', 0) :|: z' >= 0, z >= 0
add'(z, z', z'') -{ 1 }→ add'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ add'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 13 }→ add'#3(s84, z1, @ys) :|: s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 1 }→ 1 + @z + add'(z', z'', @r') :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']

(245) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(246) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']

(247) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: compare#3
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 3 + z

(248) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#3}, {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: ?, size: O(n1) [3 + z]

(249) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: compare#3
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 8

(250) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]

(251) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(252) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]

(253) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: diff
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(254) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {diff}, {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: ?, size: INF

(255) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: diff
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 12

(256) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF

(257) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(258) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF

(259) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sub'#2
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

Computed SIZE bound using CoFloCo for: sub'#1
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

Computed SIZE bound using CoFloCo for: sub'#3
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(260) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub'#2,sub'#1,sub'#3}, {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: ?, size: INF
sub'#1: runtime: ?, size: INF
sub'#3: runtime: ?, size: INF

(261) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using PUBS for: sub'#2
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 20 + 20·z1

Computed RUNTIME bound using CoFloCo for: sub'#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 1 + 20·z

Computed RUNTIME bound using CoFloCo for: sub'#3
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 7 + 20·z'

(262) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 1 }→ sub'#1(z, z', z'') :|: z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ sub'#2(z', z'', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 13 }→ sub'#3(1 + s88 + s71, z1, @ys) :|: s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 2 }→ sub'#4(sub'#1(z', z'', @r'), @z) :|: z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF

(263) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(264) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF

(265) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: add
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 32·z

(266) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {add}, {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: ?, size: O(n1) [32·z]

(267) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: add
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 7 + 16·z + 48·z'

(268) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ add(z', z'') :|: z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]

(269) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(270) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]

(271) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: compare#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 3·z'

Computed SIZE bound using CoFloCo for: compare#2
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 3·z

(272) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare#1,compare#2}, {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: ?, size: O(n1) [3·z']
compare#2: runtime: ?, size: O(n1) [3·z]

(273) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using PUBS for: compare#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 3 + 11·z'

Computed RUNTIME bound using CoFloCo for: compare#2
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + 11·z

(274) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 1 }→ compare#1(z, z') :|: z' >= 0, z >= 0
compare#1(z, z') -{ 1 }→ compare#2(z', @x, @xs) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 2 }→ compare#3(compare#1(z'', @ys), z', @y) :|: z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 2 }→ #less(compare#1(z, z'), 1 + (1 + 0)) :|: z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]

(275) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(276) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]

(277) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sub'
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(278) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub'}, {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: ?, size: INF

(279) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using KoAT for: sub'
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 2 + 20·z

(280) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 2 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub(z, z') -{ 1 }→ sub#1(sub'(z, z', 0)) :|: z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF

(281) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(282) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF

(283) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: mult#3
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 32·z' + z''

(284) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#3}, {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: ?, size: O(n1) [32·z' + z'']

(285) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: mult#3
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 8 + 16·z' + 48·z''

(286) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 2 }→ mult#3(s38, z', z) :|: s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']

(287) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(288) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']

(289) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: leq
after applying outer abstraction to obtain an ITS,
resulting in: O(1) with polynomial bound: 2

(290) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {leq}, {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: ?, size: O(1) [2]

(291) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: leq
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 6 + 11·z'

(292) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]

(293) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(294) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]

(295) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: compare
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 3·z'

(296) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {compare}, {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: ?, size: O(n1) [3·z']

(297) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: compare
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 4 + 11·z'

(298) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']

(299) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(300) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']

(301) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: sub
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(302) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {sub}, {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: ?, size: INF

(303) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: sub
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 5 + 20·z

(304) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF

(305) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(306) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF

(307) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: mult#2
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: z + 32·z'

(308) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#2}, {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: ?, size: O(n1) [z + 32·z']

(309) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using CoFloCo for: mult#2
after applying outer abstraction to obtain an ITS,
resulting in: O(n1) with polynomial bound: 10 + 48·z + 16·z'

(310) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']

(311) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(312) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']

(313) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: mult#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 2 + z + 32·z·z'

(314) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult#1}, {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: ?, size: O(n2) [2 + z + 32·z·z']

(315) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using KoAT for: mult#1
after applying outer abstraction to obtain an ITS,
resulting in: O(n3) with polynomial bound: 1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'

(316) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 1 }→ mult#1(z, z') :|: z' >= 0, z >= 0
mult#1(z, z') -{ 3 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 2 }→ mult#2(1 + 0 + mult#1(@xs, z'), z', @x) :|: @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 2 }→ mult(mult#1(z, z'), z') :|: z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: O(n3) [1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']

(317) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(318) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s112 :|: s112 >= 0, s112 <= 32 * (z * z') + 1 * z + 2, z' >= 0, z >= 0
mult#1(z, z') -{ 62 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s113 + 16·z' }→ s114 :|: s113 >= 0, s113 <= 32 * (@xs * z') + 1 * @xs + 2, s114 >= 0, s114 <= 1 * (1 + 0 + s113) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 61 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s115 + 16·z' }→ s116 :|: s115 >= 0, s115 <= 32 * (@xs * z') + 1 * @xs + 2, s116 >= 0, s116 <= 1 * (1 + 0 + s115) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 3 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ mult(s117, z') :|: s117 >= 0, s117 <= 32 * (z * z') + 1 * z + 2, z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: O(n3) [1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']

(319) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using KoAT for: mult
after applying outer abstraction to obtain an ITS,
resulting in: O(n2) with polynomial bound: 2 + z + 32·z·z'

(320) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s112 :|: s112 >= 0, s112 <= 32 * (z * z') + 1 * z + 2, z' >= 0, z >= 0
mult#1(z, z') -{ 62 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s113 + 16·z' }→ s114 :|: s113 >= 0, s113 <= 32 * (@xs * z') + 1 * @xs + 2, s114 >= 0, s114 <= 1 * (1 + 0 + s113) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 61 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s115 + 16·z' }→ s116 :|: s115 >= 0, s115 <= 32 * (@xs * z') + 1 * @xs + 2, s116 >= 0, s116 <= 1 * (1 + 0 + s115) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 3 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ mult(s117, z') :|: s117 >= 0, s117 <= 32 * (z * z') + 1 * z + 2, z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult}, {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: O(n3) [1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']
mult: runtime: ?, size: O(n2) [2 + z + 32·z·z']

(321) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using KoAT for: mult
after applying outer abstraction to obtain an ITS,
resulting in: O(n3) with polynomial bound: 2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'

(322) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s112 :|: s112 >= 0, s112 <= 32 * (z * z') + 1 * z + 2, z' >= 0, z >= 0
mult#1(z, z') -{ 62 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s113 + 16·z' }→ s114 :|: s113 >= 0, s113 <= 32 * (@xs * z') + 1 * @xs + 2, s114 >= 0, s114 <= 1 * (1 + 0 + s113) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 61 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s115 + 16·z' }→ s116 :|: s115 >= 0, s115 <= 32 * (@xs * z') + 1 * @xs + 2, s116 >= 0, s116 <= 1 * (1 + 0 + s115) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 3 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ mult(s117, z') :|: s117 >= 0, s117 <= 32 * (z * z') + 1 * z + 2, z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: O(n3) [1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']
mult: runtime: O(n3) [2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']

(323) ResultPropagationProof (UPPER BOUND(ID) transformation)

Applied inner abstraction using the recently inferred runtime/size bounds where possible.

(324) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s112 :|: s112 >= 0, s112 <= 32 * (z * z') + 1 * z + 2, z' >= 0, z >= 0
mult#1(z, z') -{ 62 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s113 + 16·z' }→ s114 :|: s113 >= 0, s113 <= 32 * (@xs * z') + 1 * @xs + 2, s114 >= 0, s114 <= 1 * (1 + 0 + s113) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 61 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s115 + 16·z' }→ s116 :|: s115 >= 0, s115 <= 32 * (@xs * z') + 1 * @xs + 2, s116 >= 0, s116 <= 1 * (1 + 0 + s115) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 5 + 313·s117 + 32·s117·z' + 96·s1172 + 3072·s1172·z' + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s118 :|: s118 >= 0, s118 <= 1 * s117 + 32 * (z' * s117) + 2, s117 >= 0, s117 <= 32 * (z * z') + 1 * z + 2, z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: O(n3) [1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']
mult: runtime: O(n3) [2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']

(325) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed SIZE bound using CoFloCo for: mult3
after applying outer abstraction to obtain an ITS,
resulting in: INF with polynomial bound: ?

(326) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s112 :|: s112 >= 0, s112 <= 32 * (z * z') + 1 * z + 2, z' >= 0, z >= 0
mult#1(z, z') -{ 62 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s113 + 16·z' }→ s114 :|: s113 >= 0, s113 <= 32 * (@xs * z') + 1 * @xs + 2, s114 >= 0, s114 <= 1 * (1 + 0 + s113) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 61 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s115 + 16·z' }→ s116 :|: s115 >= 0, s115 <= 32 * (@xs * z') + 1 * @xs + 2, s116 >= 0, s116 <= 1 * (1 + 0 + s115) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 5 + 313·s117 + 32·s117·z' + 96·s1172 + 3072·s1172·z' + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s118 :|: s118 >= 0, s118 <= 1 * s117 + 32 * (z' * s117) + 2, s117 >= 0, s117 <= 32 * (z * z') + 1 * z + 2, z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed: {mult3}
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: O(n3) [1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']
mult: runtime: O(n3) [2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']
mult3: runtime: ?, size: INF

(327) IntTrsBoundProof (UPPER BOUND(ID) transformation)


Computed RUNTIME bound using KoAT for: mult3
after applying outer abstraction to obtain an ITS,
resulting in: O(n5) with polynomial bound: 1015 + 1010·z + 34656·z·z' + 394240·z·z'2 + 192·z2 + 12288·z2·z' + 294912·z2·z'2 + 3145728·z2·z'3 + 12352·z'

(328) Obligation:

Complexity RNTS consisting of the following rules:

#abs(z) -{ 1 }→ 0 :|: z = 0
#abs(z) -{ 0 }→ 0 :|: z >= 0
#abs(z) -{ 1 }→ 1 + (z - 1) :|: z - 1 >= 0
#abs(z) -{ 1 }→ 1 + (1 + (z - 1)) :|: z - 1 >= 0
#add(z, z') -{ 0 }→ s :|: s >= 0, s <= 1 * (1 + (1 + 0)) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ s' :|: s' >= 0, s' <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ s'' :|: s'' >= 0, s'' <= 1 * (1 + (1 + (z' - 3))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ s1 :|: s1 >= 0, s1 <= 1 * (1 + (1 + (1 + (z' - 2)))) + 2, z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0
#add(z, z') -{ 0 }→ s2 :|: s2 >= 0, s2 <= 1 * 0 + 2, z = 1 + (1 + (1 + 0)), z' >= 0
#add(z, z') -{ 0 }→ s27 :|: s25 >= 0, s25 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s26 >= 0, s26 <= 1 * s25 + 2, s27 >= 0, s27 <= 1 * s26 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ s30 :|: s28 >= 0, s28 <= 2 * (1 + (1 + (z - 4))) + 1 * z', s29 >= 0, s29 <= 1 * s28 + 2, s30 >= 0, s30 <= 1 * s29 + 2, z - 4 >= 0, z' >= 0
#add(z, z') -{ 0 }→ z' :|: z = 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0, z' = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + 0), z' >= 0
#add(z, z') -{ 0 }→ 0 :|: z - 3 >= 0, z' >= 0, v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, 1 + (1 + 0) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, v0 >= 0, 1 + (1 + 0) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), v0 >= 0, 0 = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + 0)
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, v0 >= 0, 1 + (1 + (z' - 3)) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, v0 >= 0, 1 + (1 + (1 + (z' - 2))) = v0
#add(z, z') -{ 0 }→ 0 :|: z = 1 + (1 + (1 + 0)), z' >= 0, v0' >= 0, 0 = v0'
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + @x') :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + (1 + @x'))
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + 0), z' >= 0, z' = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z - 3 >= 0, z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 1 + (1 + 0), 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + 0) :|: z = 1 + (1 + (1 + 0)), z' >= 0, 0 = 0
#add(z, z') -{ 0 }→ 1 + (1 + (z' - 3)) :|: z = 1 + (1 + 0), z' >= 0, z' - 3 >= 0
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x)) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' = 0, @x >= 0, 1 + (1 + 0) = 1 + (1 + @x)
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 3 >= 0, @x' >= 0, 1 + (1 + (z' - 3)) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + @x')) :|: z = 1 + (1 + (1 + 0)), z' >= 0, z' - 2 >= 0, @x' >= 0, 1 + (1 + (1 + (z' - 2))) = 1 + (1 + @x')
#add(z, z') -{ 0 }→ 1 + (1 + (1 + (z' - 2))) :|: z = 1 + (1 + 0), z' >= 0, z' - 2 >= 0
#and(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#and(z, z') -{ 0 }→ 1 :|: z = 1, z' = 1
#and(z, z') -{ 0 }→ 1 :|: z' = 2, z = 1
#and(z, z') -{ 0 }→ 1 :|: z = 2, z' = 1
#and(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#ckgt(z) -{ 0 }→ 2 :|: z = 2
#ckgt(z) -{ 0 }→ 1 :|: z = 1
#ckgt(z) -{ 0 }→ 1 :|: z = 3
#ckgt(z) -{ 0 }→ 0 :|: z >= 0
#cklt(z) -{ 0 }→ 2 :|: z = 3
#cklt(z) -{ 0 }→ 1 :|: z = 1
#cklt(z) -{ 0 }→ 1 :|: z = 2
#cklt(z) -{ 0 }→ 0 :|: z >= 0
#compare(z, z') -{ 0 }→ s5 :|: s5 >= 0, s5 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ s6 :|: s6 >= 0, s6 <= 3, z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 3 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z = 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' = 0
#compare(z, z') -{ 0 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0
#compare(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#compare(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#div(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#div(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#div(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#div(z, z') -{ 0 }→ 1 + s32 :|: s32 >= 0, s32 <= 1 * (z - 1) + 1, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s41 :|: s41 >= 0, s41 <= 2, z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ s44 :|: s42 >= 0, s42 <= 2, s43 >= 0, s43 <= 2, s44 >= 0, s44 <= 2, @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 2 :|: z = 0, z' = 0
#eq(z, z') -{ 0 }→ 2 :|: z = 2, z' = 2
#eq(z, z') -{ 0 }→ 1 :|: z = 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' = 0
#eq(z, z') -{ 0 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z' = 2, z = 1 + @x_1 + @x_2, @x_2 >= 0
#eq(z, z') -{ 0 }→ 1 :|: @x_1 >= 0, z = 1 + @x_1 + @x_2, @y_1 >= 0, @x_2 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 1 :|: z = 2, @y_1 >= 0, @y_2 >= 0, z' = 1 + @y_1 + @y_2
#eq(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#equal(z, z') -{ 1 }→ s36 :|: s36 >= 0, s36 <= 2, z >= 0, z' >= 0
#greater(z, z') -{ 1 }→ s10 :|: s9 >= 0, s9 <= 3, s10 >= 0, s10 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ s8 :|: s7 >= 0, s7 <= 3, s8 >= 0, s8 <= 2, z' - 1 >= 0, z - 1 >= 0
#greater(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 2 = 2
#greater(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#greater(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 3 = 3
#greater(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#greater(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#greater(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#less(z, z') -{ 1 }→ s12 :|: s11 >= 0, s11 <= 3, s12 >= 0, s12 <= 2, z' - 1 >= 0, z - 1 >= 0
#less(z, z') -{ 1 }→ s14 :|: s13 >= 0, s13 <= 3, s14 >= 0, s14 <= 2, z - 1 >= 0, z' - 1 >= 0
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z - 1 >= 0, z' = 0, 3 = 3
#less(z, z') -{ 1 }→ 2 :|: z' - 1 >= 0, z - 1 >= 0, 3 = 3
#less(z, z') -{ 1 }→ 1 :|: z = 0, z' = 0, 1 = 1
#less(z, z') -{ 1 }→ 1 :|: z' - 1 >= 0, z = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' = 0, 2 = 2
#less(z, z') -{ 1 }→ 1 :|: z - 1 >= 0, z' - 1 >= 0, 2 = 2
#less(z, z') -{ 1 }→ 0 :|: z = 0, z' = 0, v0 >= 0, 1 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z' - 1 >= 0, z - 1 >= 0, v0 >= 0, 3 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' = 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z - 1 >= 0, z' - 1 >= 0, v0 >= 0, 2 = v0
#less(z, z') -{ 1 }→ 0 :|: z >= 0, z' >= 0, v0 >= 0, 0 = v0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z = 0, z' - 1 >= 0
#mult(z, z') -{ 0 }→ 0 :|: z - 1 >= 0, z' = 0
#mult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#mult(z, z') -{ 0 }→ 1 + s51 :|: s51 >= 0, s51 <= 4 * (z - 1) + 4 * ((z - 1) * (z' - 1)) + 2 * (z' - 1) + 2, z - 1 >= 0, z' - 1 >= 0
#natdiv(z, z') -{ 0 }→ 1 :|: z = 0, z' = 0
#natdiv(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natdiv(z, z') -{ 0 }→ 1 + s33 :|: s33 >= 0, s33 <= 1 * (z - 1) + 1, z - 1 >= 0, z' = 1 + 0
#natdiv(z, z') -{ 0 }→ 1 + s34 :|: s34 >= 0, s34 <= 1 * s3 + 1, s3 >= 0, s3 <= 1 * (z - 2), z - 2 >= 0, z' - 2 >= 0
#natdiv(z, z') -{ 0 }→ 1 + s35 :|: s35 >= 0, s35 <= 1 * 0 + 1, z - 1 >= 0, z' - 1 >= 0
#natmult(z, z') -{ 0 }→ s22 :|: s22 >= 0, s22 <= 2 * (1 + z') + 1 * 0, z = 1 + 0, z' >= 0
#natmult(z, z') -{ 0 }→ s23 :|: s23 >= 0, s23 <= 2 * (1 + z') + 1 * 0, z - 1 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ s54 :|: s52 >= 0, s52 <= 4 * (z - 2) + 4 * ((z - 2) * z') + 2 * z' + 2, s53 >= 0, s53 <= 2 * (1 + z') + 1 * s52, s54 >= 0, s54 <= 2 * (1 + z') + 1 * s53, z - 2 >= 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z = 0, z' >= 0
#natmult(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#natsub(z, z') -{ 0 }→ s4 :|: s4 >= 0, s4 <= 1 * (z - 1), z - 1 >= 0, z' - 1 >= 0
#natsub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#natsub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#pred(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#pred(z) -{ 0 }→ 0 :|: z >= 0
#pred(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#pred(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#pred(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
#sub(z, z') -{ 0 }→ s24 :|: s24 >= 0, s24 <= 2 * z + 1 * (1 + (z' - 1)), z >= 0, z' - 1 >= 0
#sub(z, z') -{ 0 }→ z :|: z >= 0, z' = 0
#sub(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
#succ(z) -{ 0 }→ 0 :|: z = 1 + (1 + 0)
#succ(z) -{ 0 }→ 0 :|: z >= 0
#succ(z) -{ 0 }→ 1 + (1 + 0) :|: z = 0
#succ(z) -{ 0 }→ 1 + (1 + (z - 3)) :|: z - 3 >= 0
#succ(z) -{ 0 }→ 1 + (1 + (1 + (z - 2))) :|: z - 2 >= 0
add(z, z') -{ 7 + 16·z + 48·z' }→ s89 :|: s89 >= 0, s89 <= 32 * z, z' >= 0, z >= 0
add(z, z') -{ 6 + 16·z + 48·z' }→ s90 :|: s90 >= 0, s90 <= 32 * z, z' >= 0, z >= 0
add'(z, z', z'') -{ 5 + 16·z + 48·z' }→ s91 :|: s91 >= 0, s91 <= 32 * z, z' >= 0, z >= 0, z'' >= 0
add'#1(z, z', z'') -{ 3 + 16·@xs + 48·z' }→ s92 :|: s92 >= 0, s92 <= 32 * @xs + 28, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 1 }→ 2 :|: z = 2, z' >= 0, z'' >= 0
add'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#2(z, z', z'', z1) -{ 19 + 48·@ys + 16·z1 }→ s93 :|: s93 >= 0, s93 <= 1 * s84 + 32 * z1, s84 >= 0, s84 <= 7, s55 >= 0, s55 <= 2 * z'' + 1 * @y, s56 >= 0, s56 <= 2 * s55 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 1 }→ 2 :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
add'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
add'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
add'#3(z, z', z'') -{ 6 + 16·z' + 48·z'' }→ 1 + @z + s94 :|: s94 >= 0, s94 <= 32 * z', z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
bitToInt(z) -{ 10 + 10·z }→ s79 :|: s79 >= 0, s79 <= inf, z >= 0
bitToInt(z) -{ 9 + 10·z }→ s80 :|: s80 >= 0, s80 <= inf', z >= 0
bitToInt'(z, z') -{ 3 + 10·z }→ s81 :|: s81 >= 0, s81 <= inf'', z' >= 0, z >= 0
bitToInt'#1(z, z') -{ 12 + 10·@xs }→ s83 :|: s82 >= 0, s82 <= inf1, s83 >= 0, s83 <= 2 * s73 + 1 * s82, s73 >= 0, s73 <= 4 * (z' * @x) + 2 * z' + 1, s74 >= 0, s74 <= 4 * ((1 + (1 + (1 + 0))) * z') + 2 * (1 + (1 + (1 + 0))) + 1, @x >= 0, z = 1 + @x + @xs, z' >= 0, @xs >= 0
bitToInt'#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
bitToInt'#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
bitToInt'#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare(z, z') -{ 4 + 11·z' }→ s101 :|: s101 >= 0, s101 <= 3 * z', z' >= 0, z >= 0
compare#1(z, z') -{ 3 + 11·z' }→ s102 :|: s102 >= 0, s102 <= 3 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
compare#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
compare#1(z, z') -{ 2 }→ 0 :|: z = 2, z' >= 0, 0 = 0
compare#1(z, z') -{ 1 }→ 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0
compare#2(z, z', z'') -{ 13 + 11·@ys }→ s104 :|: s103 >= 0, s103 <= 3 * @ys, s104 >= 0, s104 <= 1 * s103 + 3, z = 1 + @y + @ys, z' >= 0, z'' >= 0, @y >= 0, @ys >= 0
compare#2(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#2(z, z', z'') -{ 2 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, 0 = 0
compare#2(z, z', z'') -{ 1 }→ 0 :|: z = 2, z' >= 0, z'' >= 0, v0 >= 0, 0 = v0
compare#3(z, z', z'') -{ 8 }→ s86 :|: s86 >= 0, s86 <= 1 * z + 3, s37 >= 0, s37 <= 2, z' >= 0, z'' >= 0, z >= 0
compare#4(z, z', z'', z1) -{ 6 }→ s76 :|: s76 >= 0, s76 <= 3, s15 >= 0, s15 <= 3, s16 >= 0, s16 <= 2, z = 2, z'' >= 0, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 1 }→ z' :|: z'' >= 0, z = 1, z1 >= 0, z' >= 0
compare#4(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
compare#5(z, z', z'') -{ 4 }→ s19 :|: s17 >= 0, s17 <= 3, s18 >= 0, s18 <= 2, s19 >= 0, s19 <= 3, z' >= 0, z = 1, z'' >= 0
compare#5(z, z', z'') -{ 2 }→ s64 :|: s64 >= 0, s64 <= 2 * 0 + 1 * (1 + (1 + 0)), z = 2, z' >= 0, z'' >= 0
compare#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
compare#6(z) -{ 0 }→ 0 :|: z >= 0
compare#6(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
compare#6(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
compare#6(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
compare#6(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
compare#6(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff(z, z', z'') -{ 12 }→ 1 + s87 + s67 :|: s87 >= 0, s87 <= inf2, s65 >= 0, s65 <= 2 * s50 + 1 * z'', s66 >= 0, s66 <= 2, s67 >= 0, s67 <= 3, s58 >= 0, s58 <= 2 * s31 + 1 * z'', s50 >= 0, s50 <= 2 * z + 1 * z', s31 >= 0, s31 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
diff#1(z) -{ 0 }→ 0 :|: z >= 0
diff#1(z) -{ 2 }→ 0 :|: z = 1, 0 = 0
diff#1(z) -{ 1 }→ 0 :|: z = 1, v0 >= 0, 0 = v0
diff#1(z) -{ 1 }→ 0 :|: z = 2, v0 >= 0, 1 + (1 + 0) = v0
diff#1(z) -{ 2 }→ 1 + @x :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
diff#1(z) -{ 2 }→ 1 + (1 + @x) :|: z = 2, @x >= 0, 1 + (1 + 0) = 1 + @x
div(z, z') -{ 1 }→ s61 :|: s61 >= 0, s61 <= 1 * z + 1, z >= 0, z' >= 0
leq(z, z') -{ 6 + 11·z' }→ s106 :|: s105 >= 0, s105 <= 3 * z', s106 >= 0, s106 <= 2, z' >= 0, z >= 0
minus(z, z') -{ 1 }→ s49 :|: s49 >= 0, s49 <= 2 * z + 1 * z', z >= 0, z' >= 0
mod(z, z') -{ 4 }→ s78 :|: s77 >= 0, s77 <= 4 * (s62 * z) + 2 * s62 + 1, s78 >= 0, s78 <= 2 * z + 1 * s77, s62 >= 0, s62 <= 1 * z + 1, z >= 0, z' >= 0
mult(z, z') -{ 2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s112 :|: s112 >= 0, s112 <= 32 * (z * z') + 1 * z + 2, z' >= 0, z >= 0
mult#1(z, z') -{ 62 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s113 + 16·z' }→ s114 :|: s113 >= 0, s113 <= 32 * (@xs * z') + 1 * @xs + 2, s114 >= 0, s114 <= 1 * (1 + 0 + s113) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 61 + 313·@xs + 32·@xs·z' + 96·@xs2 + 3072·@xs2·z' + 48·s115 + 16·z' }→ s116 :|: s115 >= 0, s115 <= 32 * (@xs * z') + 1 * @xs + 2, s116 >= 0, s116 <= 1 * (1 + 0 + s115) + 32 * z', @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0
mult#1(z, z') -{ 1 }→ 2 :|: z = 2, z' >= 0
mult#1(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
mult#2(z, z', z'') -{ 10 + 48·z + 16·z' }→ s111 :|: s111 >= 0, s111 <= 32 * z' + 1 * z, s38 >= 0, s38 <= 2, z'' >= 0, z' >= 0, z >= 0
mult#3(z, z', z'') -{ 8 + 16·z' + 48·z'' }→ s100 :|: s100 >= 0, s100 <= 32 * z', z = 2, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 1 }→ z'' :|: z = 1, z' >= 0, z'' >= 0
mult#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
mult3(z, z', z'') -{ 5 + 313·s117 + 32·s117·z' + 96·s1172 + 3072·s1172·z' + 313·z + 32·z·z' + 96·z2 + 3072·z2·z' }→ s118 :|: s118 >= 0, s118 <= 1 * s117 + 32 * (z' * s117) + 2, s117 >= 0, s117 <= 32 * (z * z') + 1 * z + 2, z'' >= 0, z' >= 0, z >= 0
plus(z, z') -{ 1 }→ s20 :|: s20 >= 0, s20 <= 2 * z + 1 * z', z >= 0, z' >= 0
sub(z, z') -{ 5 + 20·z }→ s108 :|: s107 >= 0, s107 <= inf8, s108 >= 0, s108 <= 1 * s107, z' >= 0, z >= 0
sub(z, z') -{ 4 + 20·z }→ s110 :|: s109 >= 0, s109 <= inf9, s110 >= 0, s110 <= 1 * s109, z' >= 0, z >= 0
sub#1(z) -{ 1 }→ @b :|: @_@1 >= 0, z = 1 + @b + @_@1, @b >= 0
sub'(z, z', z'') -{ 2 + 20·z }→ s95 :|: s95 >= 0, s95 <= inf4, z' >= 0, z >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 21 + 20·@xs }→ s96 :|: s96 >= 0, s96 <= inf5, @x >= 0, z = 1 + @x + @xs, @xs >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#1(z, z', z'') -{ 1 }→ 1 + 2 + z'' :|: z = 2, z' >= 0, z'' >= 0
sub'#2(z, z', z'', z1) -{ 20 + 20·z1 }→ s99 :|: s99 >= 0, s99 <= inf7, s88 >= 0, s88 <= inf3, s68 >= 0, s68 <= 2 * z'' + 1 * @y, s69 >= 0, s69 <= 2 * s68 + 1 * z', s70 >= 0, s70 <= 2, s71 >= 0, s71 <= 3, s59 >= 0, s59 <= 2 * z'' + 1 * @y, s60 >= 0, s60 <= 2 * s59 + 1 * z', z = 1 + @y + @ys, z'' >= 0, z1 >= 0, @y >= 0, @ys >= 0, z' >= 0
sub'#2(z, z', z'', z1) -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0, z1 >= 0
sub'#2(z, z', z'', z1) -{ 1 }→ 1 + 2 + z' :|: z = 2, z'' >= 0, z1 >= 0, z' >= 0
sub'#3(z, z', z'') -{ 7 + 20·z' }→ s98 :|: s97 >= 0, s97 <= inf6, s98 >= 0, s98 <= 1 * s97 + 1 * @z + 1, z = 1 + @z + @r', z' >= 0, @r' >= 0, z'' >= 0, @z >= 0
sub'#3(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#4(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sub'#4(z, z') -{ 4 }→ 1 + s46 + @s :|: s45 >= 0, s45 <= 2, s46 >= 0, s46 <= 1 * z' + 1 * @zs + 1, z = 1 + @zs + @s, @zs >= 0, @s >= 0, z' >= 0
sub'#5(z, z', z'') -{ 0 }→ 0 :|: z >= 0, z' >= 0, z'' >= 0
sub'#5(z, z', z'') -{ 1 }→ 1 + z' + z'' :|: z = 1, z'' >= 0, z' >= 0
sub'#5(z, z', z'') -{ 2 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, 0 = 0
sub'#5(z, z', z'') -{ 1 }→ 1 + 0 + z'' :|: z = 2, z'' >= 0, z' >= 0, v0 >= 0, 0 = v0
sum(z, z', z'') -{ 12 }→ s85 :|: s85 >= 0, s85 <= 7, s57 >= 0, s57 <= 2 * s21 + 1 * z'', s21 >= 0, s21 <= 2 * z + 1 * z', z >= 0, z' >= 0, z'' >= 0
sum#1(z) -{ 9 }→ s75 :|: s75 >= 0, s75 <= 7, s39 >= 0, s39 <= 2, z >= 0
sum#2(z, z') -{ 7 }→ s63 :|: s63 >= 0, s63 <= 7, s40 >= 0, s40 <= 2, z = 1, z' >= 0
sum#2(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#2(z, z') -{ 3 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0
sum#2(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, 0 = 0, v0 >= 0, 0 = v0
sum#2(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 0 = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 5 }→ s48 :|: s47 >= 0, s47 <= 2, s48 >= 0, s48 <= 7, z = 1, z' >= 0
sum#3(z, z') -{ 0 }→ 0 :|: z >= 0, z' >= 0
sum#3(z, z') -{ 2 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, 0 = 0
sum#3(z, z') -{ 1 }→ 1 + 0 + 0 :|: z = 2, z' >= 0, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 0 = v0'
sum#3(z, z') -{ 3 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#3(z, z') -{ 3 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, 0 = 0
sum#3(z, z') -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 2, z' >= 0, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 0 = v0
sum#4(z) -{ 0 }→ 0 :|: z >= 0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + 0 :|: z = 2, 0 = 0, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 1 }→ 1 + 0 + 0 :|: z = 2, v0 >= 0, 0 = v0, v0' >= 0, 1 + (1 + 0) = v0'
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + @x) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + @x) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 1, v0 >= 0, 1 + (1 + 0) = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 3 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, 0 = 0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + 0 + (1 + (1 + @x)) :|: z = 2, v0 >= 0, 0 = v0, @x >= 0, 1 + (1 + 0) = 1 + @x
sum#4(z) -{ 2 }→ 1 + (1 + @x) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + @x) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 2 }→ 1 + (1 + (1 + @x)) + 0 :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, v0 >= 0, 1 + (1 + 0) = v0
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + @x') :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
sum#4(z) -{ 3 }→ 1 + (1 + (1 + @x)) + (1 + (1 + @x')) :|: z = 1, @x >= 0, 1 + (1 + 0) = 1 + @x, @x' >= 0, 1 + (1 + 0) = 1 + @x'
times(z, z') -{ 1 }→ s72 :|: s72 >= 0, s72 <= 4 * (z' * z) + 2 * z' + 1, z >= 0, z' >= 0

Function symbols to be analyzed:
Previous analysis results are:
#ckgt: runtime: O(1) [0], size: O(1) [2]
sub#1: runtime: O(1) [1], size: O(n1) [z]
#pred: runtime: O(1) [0], size: O(n1) [2 + z]
#natsub: runtime: O(1) [0], size: O(n1) [z]
compare#6: runtime: O(1) [2], size: O(1) [3]
sum#4: runtime: O(1) [3], size: O(1) [7]
#and: runtime: O(1) [0], size: O(1) [2]
sub'#5: runtime: O(1) [2], size: O(n1) [1 + z' + z'']
#cklt: runtime: O(1) [0], size: O(1) [2]
#compare: runtime: O(1) [0], size: O(1) [3]
diff#1: runtime: O(1) [2], size: O(1) [3]
#abs: runtime: O(1) [1], size: O(n1) [1 + z]
#succ: runtime: O(1) [0], size: O(n1) [2 + z]
#greater: runtime: O(1) [1], size: O(1) [2]
#add: runtime: O(1) [0], size: O(n1) [2·z + z']
#natdiv: runtime: O(1) [0], size: O(n1) [1 + z]
#eq: runtime: O(1) [0], size: O(1) [2]
#less: runtime: O(1) [1], size: O(1) [2]
#sub: runtime: O(1) [0], size: O(n1) [2·z + z']
#natmult: runtime: O(1) [0], size: O(n2) [2 + 4·z + 4·z·z' + 2·z']
plus: runtime: O(1) [1], size: O(n1) [2·z + z']
#div: runtime: O(1) [0], size: O(n1) [1 + z]
sum#3: runtime: O(1) [5], size: O(1) [7]
sub'#4: runtime: O(1) [4], size: O(n1) [1 + z + z']
#equal: runtime: O(1) [1], size: O(1) [2]
minus: runtime: O(1) [1], size: O(n1) [2·z + z']
#mult: runtime: O(1) [0], size: O(n2) [1 + 4·z·z' + 2·z']
div: runtime: O(1) [1], size: O(n1) [1 + z]
sum#2: runtime: O(1) [7], size: O(1) [7]
compare#5: runtime: O(1) [4], size: O(1) [3]
times: runtime: O(1) [1], size: O(n2) [1 + 4·z·z' + 2·z']
bitToInt': runtime: O(n1) [8 + 10·z], size: INF
bitToInt'#1: runtime: O(n1) [2 + 10·z], size: INF
sum#1: runtime: O(1) [9], size: O(1) [7]
compare#4: runtime: O(1) [6], size: O(n1) [3 + z']
mod: runtime: O(1) [4], size: INF
bitToInt: runtime: O(n1) [10 + 10·z], size: INF
sum: runtime: O(1) [12], size: O(1) [7]
add'#2: runtime: O(n1) [2 + 48·z + 16·z1], size: O(n1) [28 + 32·z1]
add'#1: runtime: O(n1) [4 + 16·z + 48·z'], size: O(n1) [32·z]
add': runtime: O(n1) [5 + 16·z + 48·z'], size: O(n1) [32·z]
add'#3: runtime: O(n1) [6 + 16·z' + 48·z''], size: O(n1) [z + 32·z']
compare#3: runtime: O(1) [8], size: O(n1) [3 + z]
diff: runtime: O(1) [12], size: INF
sub'#2: runtime: O(n1) [20 + 20·z1], size: INF
sub'#1: runtime: O(n1) [1 + 20·z], size: INF
sub'#3: runtime: O(n1) [7 + 20·z'], size: INF
add: runtime: O(n1) [7 + 16·z + 48·z'], size: O(n1) [32·z]
compare#1: runtime: O(n1) [3 + 11·z'], size: O(n1) [3·z']
compare#2: runtime: O(n1) [2 + 11·z], size: O(n1) [3·z]
sub': runtime: O(n1) [2 + 20·z], size: INF
mult#3: runtime: O(n1) [8 + 16·z' + 48·z''], size: O(n1) [32·z' + z'']
leq: runtime: O(n1) [6 + 11·z'], size: O(1) [2]
compare: runtime: O(n1) [4 + 11·z'], size: O(n1) [3·z']
sub: runtime: O(n1) [5 + 20·z], size: INF
mult#2: runtime: O(n1) [10 + 48·z + 16·z'], size: O(n1) [z + 32·z']
mult#1: runtime: O(n3) [1 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']
mult: runtime: O(n3) [2 + 313·z + 32·z·z' + 96·z2 + 3072·z2·z'], size: O(n2) [2 + z + 32·z·z']
mult3: runtime: O(n5) [1015 + 1010·z + 34656·z·z' + 394240·z·z'2 + 192·z2 + 12288·z2·z' + 294912·z2·z'2 + 3145728·z2·z'3 + 12352·z'], size: INF

(329) FinalProof (EQUIVALENT transformation)

Computed overall runtime complexity

(330) BOUNDS(1, n^5)